Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Можно ли отобразить range удара случайному игроку?

Статус
Закрыто для дальнейших ответов.

QuodLitee

Активный участник
Пользователь
Баллы
66
Код:
trackedPlayers = new HashMap<>();

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (!(sender instanceof Player)) {
            if (args.length < 1) {
                sender.sendMessage(ChatColor.RED + "Usage: /put");
                return true;
            }

            Player target = Bukkit.getPlayer(args[0]);

            if (target == null) {
                sender.sendMessage(ChatColor.RED + "Player not found.");
                return true;
            }

            trackedPlayers.put(target.getUniqueId(), target.getUniqueId());
            return true;
        } else {
            Player player = (Player) sender;

            if (args.length < 1) {
                player.sendMessage(ChatColor.RED + "Usage: /put");
                return true;
            }

            Player target = Bukkit.getPlayer(args[0]);

            if (target == null) {
                player.sendMessage(ChatColor.RED + "Player not found.");
                return true;
            }

            trackedPlayers.put(player.getUniqueId(), target.getUniqueId());
            return true;
        }
    }

    @EventHandler
    public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
        if (!(event.getDamager() instanceof Player)) {
            return;
        }

        Player damager = (Player) event.getDamager();

        if (!trackedPlayers.containsKey(damager.getUniqueId())) {
            return;
        }

        Player target = Bukkit.getPlayer(trackedPlayers.get(damager.getUniqueId()));

        if (target == null) {
            return;
        }

        double distance = damager.getLocation().distance(target.getLocation());
        damager.sendMessage(ChatColor.AQUA + "[" + target.getName() + "] " + ChatColor.RESET + "range: " + String.format("%.2f", distance));
    }
Вопрос такой: можно ли передать сообщение(которое сейчас отправляется damager) игроку который написал команду /put
 
Здраствуй, вопрос скорей не "можно ли", а "как это сделать"! А на "можно ли?", можно почти всё, главное знание и умение!

В данном случае эту проблему можно решить наличием записи игроков. Создаёшь свой класс игрока, через наследование или полностью свой, добавляешь нужные методы с переменными по типу trackedPlayers<Player> и далее используешь как хочешь и где хочешь.
 
Создаёшь свой класс игрока, через наследование или полностью свой, добавляешь нужные методы с переменными по типу trackedPlayers<Player> и далее используешь как хочешь и где хочешь.
Какой ужас. Больше такое не предлагай.
Вопрос такой: можно ли передать сообщение(которое сейчас отправляется damager) игроку который написал команду /put
Твоя команда /put требует аргумента с ником игрока. Т.е. ввести её может кто угодно, но слушать будет только тот, кого вписали в аргументы.
Вот что я накалякал: https://pastebin.com/DtkBfzQL
 
Какой ужас. Больше такое не предлагай.
Твоя команда /put требует аргумента с ником игрока. Т.е. ввести её может кто угодно, но слушать будет только тот, кого вписали в аргументы.
Вот что я накалякал: https://pastebin.com/DtkBfzQL
А в чём проблема в мапу записывать не ууид игрока, а объект игрока? Зачем каждый раз его искать по ууиду?
Я конечно понимаю, что в таком случае игроку который перезашёл тоже будет отсылаться, но нужно ли это?
 
Какой ужас. Больше такое не предлагай.
Твоя команда /put требует аргумента с ником игрока. Т.е. ввести её может кто угодно, но слушать будет только тот, кого вписали в аргументы.
Вот что я накалякал: https://pastebin.com/DtkBfzQL
Без понятия, что не понравилось, но создать массив или мап для отслеживания игрока - не такая уж и проблема, а если нужно хранить доп. инфу о каждом отдельном игроке, то просто делать уже свой класс игрока с нужными тебе переменными и методами.

А в чём проблема в мапу записывать не ууид игрока, а объект игрока? Зачем каждый раз его искать по ууиду?
Я конечно понимаю, что в таком случае игроку который перезашёл тоже будет отсылаться, но нужно ли это?
Сам без понятия, а касательно перезахода, просто отслеживать отключение игрока в ивенте для его дальнейшего удаления и массива
 
Какой ужас. Больше такое не предлагай.
Твоя команда /put требует аргумента с ником игрока. Т.е. ввести её может кто угодно, но слушать будет только тот, кого вписали в аргументы.
Вот что я накалякал: https://pastebin.com/DtkBfzQL
Только что глянул код, но решение довольно странное. Как минимум, я предпологал, что каждый слушатель будет следить за своим конкретным игроком, которого он выбрал, а тут сообщение отправляется всем слушателям, вне зависимости от игрока...
 
Только что глянул код, но решение довольно странное. Как минимум, я предпологал, что каждый слушатель будет следить за своим конкретным игроком, которого он выбрал, а тут сообщение отправляется всем слушателям, вне зависимости от игрока...
Тогда твой вопрос не особо понятен.
Если ты хочешь отправлять range конкретного игрока тому, кто написал команду, то в таком случае тебе нужно где-то хранить эти данные привязывая к игроку, и уже когда нужно брать и отсылать. В любом случае, мы сможем помочь адекватней, если ты подробно опишешь свою конечную цель.
 
Только что глянул код, но решение довольно странное. Как минимум, я предпологал, что каждый слушатель будет следить за своим конкретным игроком, которого он выбрал, а тут сообщение отправляется всем слушателям, вне зависимости от игрока...
Что написано как в коде, так и в теме, то и получено, всё просто.
Как только напишут человекопонятным языком свою цель/задумку, тогда она наполовину решится.
А в чём проблема в мапу записывать не ууид игрока, а объект игрока? Зачем каждый раз его искать по ууиду?
Я конечно понимаю, что в таком случае игроку который перезашёл тоже будет отсылаться, но нужно ли это?
UUID грубо хранит в себе только два лонга, вместо Player, который сохраняет ссылки почти на всё, не давая GC зачищать ненужные объекты.
а если нужно хранить доп. инфу о каждом отдельном игроке, то просто делать уже свой класс игрока с нужными тебе переменными и методами.
Для этого дела есть Metadata, в котором ты можешь хранить данные. Как вариант, можно использовать Memory, но что это такое - пока не щупал.
 
Последнее редактирование:
Тогда твой вопрос не особо понятен.
Если ты хочешь отправлять range конкретного игрока тому, кто написал команду, то в таком случае тебе нужно где-то хранить эти данные привязывая к игроку, и уже когда нужно брать и отсылать. В любом случае, мы сможем помочь адекватней, если ты подробно опишешь свою конечную цель.
он не тс
 
Что написано как в коде, так и в теме, то и получено, всё просто.
Как только напишут человекопонятным языком свою цель/задумку, тогда она наполовину решится.
Я просто привык делать из бреда что-то +- адекватное, так как мои обычные мысли - сумбурный бред, хотя есть и больная тема с неадекватными и непонятными запросами...
UUID грубо хранит в себе только два лонга, вместо Player, который сохраняет ссылки почти на всё, не давая GC зачищать ненужные объекты.
Не совсем уверен, что такое GC, но, как я пытаюсь понять, подобный метод позволить хранить меньше информации во временной памяти и тем самым ускорит работу плагина и уменьшит нагрузку на сервер?
Для этого дела есть Metadata, в котором ты можешь хранить данные. Как вариант, можно использовать Memory, но что это такое - пока не щупал.
Если всё так, как я думаю, это может стать крайне интересной и полезной практикой для меня и моего несчастного кода. Большое спасибо за помощь!
Тогда твой вопрос не особо понятен.
Если ты хочешь отправлять range конкретного игрока тому, кто написал команду, то в таком случае тебе нужно где-то хранить эти данные привязывая к игроку, и уже когда нужно брать и отсылать. В любом случае, мы сможем помочь адекватней, если ты подробно опишешь свою конечную цель.
P.S. Статья не моя, но всё ровно спасибо XD
 
Статус
Закрыто для дальнейших ответов.

Поделиться этой страницей

Назад
Верх