1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем QuodLitee, 13 мар 2024.

Статус темы:
Закрыта.
  1. Автор темы
    QuodLitee

    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
     
  2. Fizer228

    Fizer228 Активный участник Пользователь

    Баллы:
    66
    Здраствуй, вопрос скорей не "можно ли", а "как это сделать"! А на "можно ли?", можно почти всё, главное знание и умение!

    В данном случае эту проблему можно решить наличием записи игроков. Создаёшь свой класс игрока, через наследование или полностью свой, добавляешь нужные методы с переменными по типу trackedPlayers<Player> и далее используешь как хочешь и где хочешь.
     
  3. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Какой ужас. Больше такое не предлагай.
    Твоя команда /put требует аргумента с ником игрока. Т.е. ввести её может кто угодно, но слушать будет только тот, кого вписали в аргументы.
    Вот что я накалякал: https://pastebin.com/DtkBfzQL
     
  4. OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    А в чём проблема в мапу записывать не ууид игрока, а объект игрока? Зачем каждый раз его искать по ууиду?
    Я конечно понимаю, что в таком случае игроку который перезашёл тоже будет отсылаться, но нужно ли это?
     
  5. Fizer228

    Fizer228 Активный участник Пользователь

    Баллы:
    66
    Без понятия, что не понравилось, но создать массив или мап для отслеживания игрока - не такая уж и проблема, а если нужно хранить доп. инфу о каждом отдельном игроке, то просто делать уже свой класс игрока с нужными тебе переменными и методами.

    Сам без понятия, а касательно перезахода, просто отслеживать отключение игрока в ивенте для его дальнейшего удаления и массива
     
  6. Fizer228

    Fizer228 Активный участник Пользователь

    Баллы:
    66
    Только что глянул код, но решение довольно странное. Как минимум, я предпологал, что каждый слушатель будет следить за своим конкретным игроком, которого он выбрал, а тут сообщение отправляется всем слушателям, вне зависимости от игрока...
     
  7. OJIEKCAHDP

    OJIEKCAHDP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Тогда твой вопрос не особо понятен.
    Если ты хочешь отправлять range конкретного игрока тому, кто написал команду, то в таком случае тебе нужно где-то хранить эти данные привязывая к игроку, и уже когда нужно брать и отсылать. В любом случае, мы сможем помочь адекватней, если ты подробно опишешь свою конечную цель.
     
  8. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Что написано как в коде, так и в теме, то и получено, всё просто.
    Как только напишут человекопонятным языком свою цель/задумку, тогда она наполовину решится.
    UUID грубо хранит в себе только два лонга, вместо Player, который сохраняет ссылки почти на всё, не давая GC зачищать ненужные объекты.
    Для этого дела есть Metadata, в котором ты можешь хранить данные. Как вариант, можно использовать Memory, но что это такое - пока не щупал.
     
    Последнее редактирование: 15 мар 2024
  9. mirrerror

    mirrerror Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    он не тс
     
  10. Fizer228

    Fizer228 Активный участник Пользователь

    Баллы:
    66
    Я просто привык делать из бреда что-то +- адекватное, так как мои обычные мысли - сумбурный бред, хотя есть и больная тема с неадекватными и непонятными запросами...
    Не совсем уверен, что такое GC, но, как я пытаюсь понять, подобный метод позволить хранить меньше информации во временной памяти и тем самым ускорит работу плагина и уменьшит нагрузку на сервер?
    Если всё так, как я думаю, это может стать крайне интересной и полезной практикой для меня и моего несчастного кода. Большое спасибо за помощь!
    P.S. Статья не моя, но всё ровно спасибо XD
     
Статус темы:
Закрыта.

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