Помогите Как получить игроков в радиусе 30 блоков и выполнить с ними действие?

kleksyworld

Активный участник
Баллы
61
Имя в Minecraft
_TheKrealisYT_
Привет! Я хочу сделать плагин на команду /wh(wallhack). Игрок исполняет команду /wh, нужно получить игроков в радиусе 30 блоков и выполнить с ними действие(Выдать эффект подсвечивания это с 1.12.2 эффект). В принципе это я уже выполнил. Но мне нужно, чтобы игроки подсвечивались только у отправителя команды, а так они были не подсвечены. Как это сделать? Можете лишь написать метод, которым можно получить игроков в радиусе 30 метров, после этого напишите типо "// тут дальше код" остальное я сам сделаю. Да, и лучше попробуйте не на словах а кодом написать, иначе я вряд ли пойму

P.S вот код:
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if(!(sender instanceof Player)) {
sender.sendMessage("Команду можно использовать только от имени игрока!");
}
final Player player = (Player)sender;
List<Entity> near = player.getNearbyEntities(30.0D, 30.0D, 30.0D);
for(Entity entity : near) {
if(entity instanceof Player) {
Player nearPlayer = (Player) entity;
player.sendMessage(ChatColor.GREEN + "WallHack активирован.");
nearPlayer.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, 250, 1));

}
}
return false;
}



}
 
Последнее редактирование:
Можно либо по объёму куба, либо по дистанции до игрока.
1 вариант: Есть специальный метод, как-то вроде getNearbyEntities(x, y, z). Делаешь проверки на игроков ну и выполняешь действия.
2 вариант: Циклом пройтись по списку игроков и сравнить дистанцию от тебя до каждого игрока. Если дистанция меньше, например, 10 блоков, то применить действие.
P.S. По объёму куба, понятное дело, будет большая дистанция до игроков в углах.
 
Код:
player().getLocation().getNearbyPlayers(30).forEach(player -> {
     player.setGlowing(true);
});
 
Задали вопрос как сделать чтобы подсвечивалось у отправителя начали писать про обнаружение игроков
 
Код:
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(this, PacketType.Play.Server.ENTITY_METADATA, PacketType.Play.Server.NAMED_ENTITY_SPAWN) {
 @Override
            void onPacketSending(Event event) {
                if (event.getPlayer() is a player who you want to see the glow) {
                    if (Bukkit.getOnlinePlayers() has a player with player.getEntityId() = = event.getPacket().getIntegers().read(0)) {
                        if (event.getPacketType() = = Entity Metadata) {
                            List watchableObjectList = event.getPacket().getWatchableCollectionModifier().read(0);
                            if (watchableObjectList has object with getIndex() == 0) {
 WrappedWatchableObject watchableObject = watchableObjectList.get object with index 0;
                                byte b = watchableObject.getValue();
 b / = 0b01000000;
 watchableObject.setValue(b);
                            }
                        } else {
 WrappedDataWatcher watcher = event.getPacket().getDataWatcherModifier().read(0);
                            if (watcher.hasIndex(0)) {
                                byte b = watcher.getByte(0);
 b / = 0b01000000;
 watcher.setObject(0, b);
                            }
                        }
                    }
                }
            }
        });
https://bukkit.org/threads/glowing-for-one-person.446790/
Тут расписано, что надо на что заменить
 
Назад
Верх