Убийство сквозь возрождение

Версия Minecraft
1.16.5
API
Forge
32
3
4
Всем ку,это я,чайник,чайники на месте.Пытаюсь разобраться,как игнорировать ивент возрождения или ивент отмены смерти,который есть у тотемов,сета аваритии или баффа от астрал сорсери и тд,чтобы убивать сквозь них.Если запихнуть этот кусочек кода,который по идее возвращает смерть в исходное состояние при попытке отмены,то ничего не происходит,тотемы и прочая нечисть продолжают работать.
public void onDeath(LivingDeathEvent event) {
if (event.isCanceled()) return;}
Я пытался ещё по-другому отменить и найти импорт,который позволял бы мне использовать EntityResurrectEvent,но про него нигде нет инфы,только на супер старом форуме нашёл упоминание про него.Помогите пожалуйста,только без заумных штуковин,я ещё совсем зелёный,не зрелый.
 
Решение
aka подлизался чтобы всё за тебя написали

Ищи как делаются миксины, потом то что я выше кучу раз написал про DamageSource всё ещё нужно, потому-что та проверка на тотем снаружи вызова метода die находится.

Метод die в PlayerEntity, ServerPlayerEntity и LivingEntity имеет вот такую первую строчку:
last_screenshot.png

Самый простой и не рекомендованный метод обойти этот onLivingDeath через миксин - это сделать его редирект (ты поймёшь, когда чуть разберёшься в миксинах, но если коротко то миксин заменяет вызов onLivingDeath на вызов твоего метода и из него ты сам вызываешь (или нет) этот onLivingDeath) и возвращать там false по твоим условиям.
Не рекомендованный потому-что...
32
3
4
я уже пробовал так сделать,разницы нет никакой,ивент отменяется слишком поздно,тотем и прочая мешура воскрешает/отменяет смерть ещё до смерти,а этот ивент именно после срабатывания смерти
 
32
3
4
при чём тут работа тотема... Тебя в другую сторону понесло.Я и так знаю его работу и уже давно не просто понял,где копать,а откопал,и написал,что мне нужен PreDeathEvent либо EntityResurrectEvent,от которых я не знаю импортов или как их вписать.Либо какой-нибудь другой чек смерти перед смертью или чек отмены смерти.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
а этот ивент именно после срабатывания смерти
Эм, бред, как он тогда может cancellable, привет. Это как раз таки Pre-ивент, просто Post-ивента за ненадобностью нету.
Cancellable - это не для отмены отсылания ивента другим модам, это для отмены чего-то, что вызвало событие.
Посмотрите в аннотацию @SubscribeEvent, во-первых там есть receiveCancelled (модам-таки не отсылаются отменённые ивенты, но они могут попросить чтобы отсылались), а во-вторых там есть priority, если хочешь событие раньше других модов получить.

Далее, отменять LivingDeathEvent - тоже бред, потому-что это как раз отменит смерть сущности - буквально обратный желаемому результат, так можно свой тотем сделать, хех.

Так вот, я послушал что умный человек сказал и пошёл глянул как работает тотем.
В LivingEntity есть вот такие строки:
last_screenshot.png
Которые означают, что тебе нужен DamageSource у которого стоит bypassInvul, в случае ванили это только void damage, или делаешь свой собственный - вуаля, тотем легко обманут.

Насчёт других модов, и проверяют ли они, как тотем, это значение - без понятия, некоторые может и да (чтобы опять-же в случае падения в пустоту не воскрешать тебя в пустоте), но я бы не надеялся на это.

Универсального решения, без каких-то кривых костылей (или миксинов) или просто подстраивания под каждый мод, скорее всего нет


мне нужен PreDeathEvent либо EntityResurrectEvent,от которых я не знаю импортов или как их вписать
то бишь ты выдумываешь предполагаешь существование таких ивентов, и не можешь их найти?
открываешь класс Event и смотришь на все классы что его наследуют, вот тебе список всех возможных ивентов, ищи там, кек
 
32
3
4
Далее, отменять LivingDeathEvent - тоже бред, потому-что это как раз отменит смерть сущности - буквально обратный желаемому результат, так можно свой тотем сделать, хех.
как я его отменяю?я же написал там,что если ивент смерти отменён,то возвратиться к изначальному состоянию(то-есть к смерти)

Универсального решения, без каких-то кривых костылей (или миксинов) или просто подстраивания под каждый мод, скорее всего нет
расскажи с костылями,и миксинами,и фиксиками,мне не главное,чтобы качественно и идеально,мне главное,чтобы работало

то бишь ты выдумываешь предполагаешь существование таких ивентов, и не можешь их найти?
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
Про отмену я отвечал на это сообщение, ну слегка трудно понять было ¯\_(ツ)_/¯;

В первую очередь таки сделай DamageSource который пробивает неузязвимость (bypassInvul в моджанговских маппингах), как минимум это минус тотемы и некоторые моды - как раз "частично рабочий" вариант, и потом посмотри как другие твои моды на это среагируют, дальше с конкретными можно будет работать.
Ну а миксинами можно, к примеру, влезть в то место где LivingDeathEvent отсылается и в определённых условиях его не отсылать, сделав невозможной отмену смерти с его помощью.

Ну так то баккитовские ивенты пхд, а не форджа;
 
32
3
4
влезть в то место где LivingDeathEvent отсылается и в определённых условиях его не отсылать
во,супер,то что надо,не мог бы ты поподробнее про это рассказать?я очень плохо разбираюсь в этой теме,в отличие от тебя,а чтобы самому разобраться нужен ум и время,которых у меня нет
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
aka подлизался чтобы всё за тебя написали

Ищи как делаются миксины, потом то что я выше кучу раз написал про DamageSource всё ещё нужно, потому-что та проверка на тотем снаружи вызова метода die находится.

Метод die в PlayerEntity, ServerPlayerEntity и LivingEntity имеет вот такую первую строчку:
last_screenshot.png

Самый простой и не рекомендованный метод обойти этот onLivingDeath через миксин - это сделать его редирект (ты поймёшь, когда чуть разберёшься в миксинах, но если коротко то миксин заменяет вызов onLivingDeath на вызов твоего метода и из него ты сам вызываешь (или нет) этот onLivingDeath) и возвращать там false по твоим условиям.
Не рекомендованный потому-что редиректы это "некрасиво", но с другой стороны моментально в голову не приходит, как скипнуть этот иф без редиректа, да и вообще думаю что тебе пофиг на "красивость" - вся проблема в том что если другой мод захочет сделать так-же то у вас будет конфликт.
 
32
3
4
Есть варик в livinghurtevent проверить что у игрока есть тотем в руке и что урон эвента его убьет, и убить его. По идее он умрёт до того как сработает тотем
спасибо за совет,но тотем это не такая большая проблема,я его для примера привёл,он и так легко воид уроном убивается,а вот сет аваритии и тп это уже гемор
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
Запредельный уровень это когда их не было вручную трансформеры байткода писать)
А так проблема миксинов как раз в том что они слишком простые, часто вещи которые можно сделать без них делают ими.
Найди туториал (ну тут на форуме был, вестимо), там добавить жсон файлик, подшаманить build.gradle, и потом сам миксин, который просто особый джава класс, в котором ты опишешь тот редирект, усё
 
Сверху