Как наложить свечение на игрока так чтобы на сервере где не установлен мод для этого игрока и для тех у кого есть мод отображалось свечение

Версия Minecraft
1.19.4
API
Forge
67
1
0
Нужно наложить эффект свечения на игрока которое будет накладываться при заходе в мир, при этом свечение должно быть видно самому светящемуся игроку, и тем игрокам у которых есть мод.
При этом на сервере не будет установлен мод.

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

Java:
@SubscribeEvent
        public static void onJoinOnLevel(EntityJoinLevelEvent e) { //При заходе в мир
                if(e.getEntity() instanceof Player) {
                    Player p = (Player) e.getEntity(); 
                    p.addEffect(new MobEffectInstance(new MobEffects().GLOWING, -1, 1));
                }
                
                if(e.getEntity() instanceof Player && e.getLevel().isClientSide) {
                    Player p = (Player) e.getEntity();
                    p.displayClientMessage(Component.literal("Приветствую тебя!"),  false);
                }
        }

При таком коде при заходе в одиночный мир, всё окей - ты светишься, кайф. Но когда заходишь на сервер ты не светишься, но эффект есть.
 
1,038
57
229
через пакеты, не хочешь через сервер отправлять, отправляй напрямую с клиента на клиент (но только сервер знает IP клиента)
 
67
1
0
Java:
@SubscribeEvent
        public static void onJoinOnLevel(WorldLoadFinishedEvent e) { //При заходе в мир
                if(e.getEntity() instanceof Player) {
                    Player p = (Player) e.getEntity(); 
                    p.addEffect(new MobEffectInstance(new MobEffects().GLOWING, -1, 1));
                }
                
                if(e.getEntity() instanceof Player && e.getLevel().isClientSide) {
                    Player p = (Player) e.getEntity();
                    p.displayClientMessage(Component.literal("Приветствую тебя!"),  false);
                }
        }

При таком коде я не смогу получить игрока из ивента
 
1,371
112
241
игрока из ивента
Когда ты работаешь с клиентом, ты работаешь с клиентским игроком. В таком случае, игрока можно получить из MinecraftClient.getInstance().player. Главное проверить на null игрока не забывай.
Это явно не тот эвент.
 
67
1
0
Попробовал так, и по другому тоже
Java:
        @SubscribeEvent
        public static void onJoinOnLevel(ClientPlayerNetworkEvent.LoggingIn e) { //При заходе в мир
                    Player p = e.getPlayer();
                    p.displayClientMessage(Component.literal("Приветствую тебя!"),  false);
                    p.addEffect(new MobEffectInstance(new MobEffects().GLOWING, -1, 1));
               
        }

Всё равно не отображается, даже не знаю что ещё можно сделать
 
1,038
57
229
ты хоть понял что ты за событие взял?
или ты не понимаешь что чтобы отрисовать рендеру нужен каждый кадр игры, 60FPS - 60 кадров в секунду. Не 1 раз, а 60 раз в секунду. И не в какой то любой момент, а именно тогда когда игра отрисывывает другие вещи.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
через пакеты, не хочешь через сервер отправлять, отправляй напрямую с клиента на клиент (но только сервер знает IP клиента)
Если бы сервер давал игрокам IP других игроков, это было бы супер не круто 🙃
Таки свой сторонний мини-сервер для синхронизации это прямое решение.
Даже в чём-то интересная идея, так-то)
 
Сверху