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

Версия Minecraft
1.19.4
API
Forge
69
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);
                }
        }

При таком коде при заходе в одиночный мир, всё окей - ты светишься, кайф. Но когда заходишь на сервер ты не светишься, но эффект есть.
 
через пакеты, не хочешь через сервер отправлять, отправляй напрямую с клиента на клиент (но только сервер знает IP клиента)
 
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);
                }
        }

При таком коде я не смогу получить игрока из ивента
 
игрока из ивента
Когда ты работаешь с клиентом, ты работаешь с клиентским игроком. В таком случае, игрока можно получить из MinecraftClient.getInstance().player. Главное проверить на null игрока не забывай.
Это явно не тот эвент.
 
Попробовал так, и по другому тоже
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));
               
        }

Всё равно не отображается, даже не знаю что ещё можно сделать
 
ты хоть понял что ты за событие взял?
или ты не понимаешь что чтобы отрисовать рендеру нужен каждый кадр игры, 60FPS - 60 кадров в секунду. Не 1 раз, а 60 раз в секунду. И не в какой то любой момент, а именно тогда когда игра отрисывывает другие вещи.
 
через пакеты, не хочешь через сервер отправлять, отправляй напрямую с клиента на клиент (но только сервер знает IP клиента)
Если бы сервер давал игрокам IP других игроков, это было бы супер не круто 🙃
Таки свой сторонний мини-сервер для синхронизации это прямое решение.
Даже в чём-то интересная идея, так-то)
 
Назад
Сверху