Обводка игрока при наведении на его модель

maleev

Пользователь
Сообщения
15
Приветствую, возможно ли реализовать в виде плагина или Skript'a, обводку игрока при наведении на его модельку?

Версия сервера: Paper 1.12.2
 
Решение
Да.
Авто объединение сообщений:

В теории, это должно работать.
Java:
public static void glowPlayer(Player who, Player whom) { //подсветка
        int entityId = whom.getEntityId();
        PacketPlayOutEntityEffect packet = new PacketPlayOutEntityEffect(entityId, new MobEffect(MobEffectList.fromId(24)));
        ((CraftPlayer)who).getHandle().playerConnection.sendPacket(packet);
    }
    
    public Player tracePlayer(Player who, int distance) { //получаем игрока, на которого  смотрим
         Location loc = who.getLocation();
         Player whom = null;
         List<Player> players = getNearbyPlayers(loc, distance);
         Vector v = who.getLocation().getDirection();
         for (Player p : players) {
             if...
Да.
Авто объединение сообщений:

В теории, это должно работать.
Java:
public static void glowPlayer(Player who, Player whom) { //подсветка
        int entityId = whom.getEntityId();
        PacketPlayOutEntityEffect packet = new PacketPlayOutEntityEffect(entityId, new MobEffect(MobEffectList.fromId(24)));
        ((CraftPlayer)who).getHandle().playerConnection.sendPacket(packet);
    }
    
    public Player tracePlayer(Player who, int distance) { //получаем игрока, на которого  смотрим
         Location loc = who.getLocation();
         Player whom = null;
         List<Player> players = getNearbyPlayers(loc, distance);
         Vector v = who.getLocation().getDirection();
         for (Player p : players) {
             if (p.getLocation().toVector().equals(v)) {
                 whom = p;
                 break;
             }
         }
         return whom;
     }

    public static List<Player> getNearbyPlayers(Location location, int distance) { //код, который я обычно использую
        List<Player> list = new ArrayList<Player>();                                                 //для получения ближайших игроков
        for (Player p : Bukkit.getServer().getOnlinePlayers())
            if (p.getLocation().distance(location) <= distance)
                list.add(p);
        return list;
    }
Также, getNearbyPlayers можно заменить на Player#getNearbyEntities и уже внутри цикла делать дополнительную проверку Entity instanceof Player.
 
Последнее редактирование:
@q20w26a, скопировал данный код, скомпилировал, но эффекта нет. Ошибок в консоли нету

Java:
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.util.Vector;
import net.minecraft.server.v1_12_R1.PacketPlayOutEntityEffect;
import org.bukkit.Location;
import java.util.*;
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
import net.minecraft.server.v1_12_R1.MobEffect;
import net.minecraft.server.v1_12_R1.MobEffectList;


public class Main extends JavaPlugin {
    public static void glowPlayer(Player who, Player whom) { //подсветка
        int entityId = whom.getEntityId();
        PacketPlayOutEntityEffect packet = new PacketPlayOutEntityEffect(entityId, new MobEffect(MobEffectList.fromId(24)));
        ((CraftPlayer)who).getHandle().playerConnection.sendPacket(packet);
    }
  
    public Player tracePlayer(Player who, int distance) { //получаем игрока, на которого  смотрим
         Location loc = who.getLocation();
         Player whom = null;
         List<Player> players = getNearbyPlayers(loc, distance);
         Vector v = who.getLocation().getDirection();
         for (Player p : players) {
             if (p.getLocation().toVector().equals(v)) {
                 whom = p;
                 break;
             }
         }
         return whom;
     }

    public static List<Player> getNearbyPlayers(Location location, int distance) { //код, который я обычно использую
        List<Player> list = new ArrayList<Player>();                                                 //для получения ближайших игроков
        for (Player p : Bukkit.getServer().getOnlinePlayers())
            if (p.getLocation().distance(location) <= distance)
                list.add(p);
        return list;

    }
}


Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Назад
Сверху Снизу