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

Помогите Не работает радиус чата

Тема в разделе "Разработка плагинов для новичков", создана пользователем fold&false, 5 авг 2020.

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

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

    Баллы:
    61
    Имя в Minecraft:
    foldandfalse
    Привет всем, решил написать свой плагин с локальным и глобальным чатом, написал локальный чат, но при отправке сообщение отправляется абсолютно всему серверу (проверял на локалке с двумя аккаунтами в радиусе 5000 от друг друга, радиус локала 75)

    Код:

    Чат:
    Код:
    // ChatChannel
    
    
    package hapesh;
    
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerChatEvent;
    
    @SuppressWarnings("deprecation")
    public class ChatChannel implements Listener {
        Main plugin;
    
        public ChatChannel (Main main) {
            plugin = main;
        }
    
    
        @EventHandler
        public void onPlayerChat (PlayerChatEvent e) {
            Player p = e.getPlayer();
            e.setCancelled(false);
    
            if(p.hasPermission("lantern.color")) {
                e.setFormat(p.getDisplayName() + "§f: " + e.getMessage().replace("&", "§"));
            }
            else{
                e.setFormat(p.getDisplayName() + "§f: " + e.getMessage());
    
            }
    
            for (Entity al : p.getNearbyEntities(1, 1, 1)) {
    
                Player al1 = (Player) al;
                if (al instanceof Player ) {
                    al1.sendMessage(e.getFormat());
                } else {
                    p.sendMessage("В вашем радиусе нет игроков");
                }
    
    
            }
        }
    }
    
    
    
    
    
    
    
    

    Main
    Код:
    // Main
    
    package hapesh;
    
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.plugin.java.JavaPlugin;
    
    
    public class Main extends JavaPlugin implements CommandExecutor {
    
    
        MessageManager mM;
        ChatManager cm;
    
        @Override
        public void onEnable(){
            saveConfig();
            getCommand("m").setExecutor(new MessageCommand(this));
            getCommand("r").setExecutor(new ReplyCommand(this));
    
            getServer().getPluginManager().registerEvents(new ChatChannel(this), this);
            mM = new MessageManager(this);
            cm = new ChatManager(this);
        }
    }
    


    Прошу помочь, буду сильно благодарен. (части Reply и Message решил не вставлять, так как они ничего из чата не трогают)
     
  2. alexandrage

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

    Баллы:
    173
    Это не так делается.
     
  3. alexandrage

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

    Баллы:
    173
    Код:
        @EventHandler
        public void onPlayerChat(AsyncPlayerChatEvent e) {
            e.getRecipients().removeIf(player -> {
                if(Условие удаления слушателя) {
                    return true;
                }
                return false;
            });
        }
     
  4. Автор темы
    fold&false

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

    Баллы:
    61
    Имя в Minecraft:
    foldandfalse
    Код:
    package hapesh;
    
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerChatEvent;
    
    public class ChatChannel implements Listener {
    
        @EventHandler
        void ChatLocal(PlayerChatEvent e) {
            Player p = e.getPlayer();
            if (p.hasPermission("lantern.color")) {
                e.setFormat(p.getName() + ": " + e.getMessage().replace("&", "§"));
            }
            else {
                e.setFormat(p.getName() + ": " + e.getMessage());
            }
           for (Entity players : p.getNearbyEntities(75, 75, 75)) {
               if (players instanceof Player) {
    
                   Player ga = (Player)players;
                   ga.sendMessage(e.getFormat());
    
    
               if (!(players instanceof Player)) {
                   p.sendMessage("В вашем радиусе никого нет");
               }
    
               }
               else {
                   return;
               }
           }
    
        }
    
    }
    Решил вот так перелопатить все с нуля почти, ибо я пробовал с AsyncPlayerChatEvent, и там была ошибка которая заключалась в том что нельзя искать мобов и игроков в Asynс, потом поставил простой PlayerChatEvent и выходит вот такая ошибка (скрин) upload_2020-8-5_21-36-23.png
     
  5. alexandrage

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

    Баллы:
    173
    Этот ивент устарел и его не нужно юзаить.
     
  6. Автор темы
    fold&false

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

    Баллы:
    61
    Имя в Minecraft:
    foldandfalse
    А какой для проверки игроков рядом с игроками?
     
  7. MurlikMurlik

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

    Баллы:
    96
    AsyncPlayerChatEvent.
    Да и проверка расстояния делается по другому.
    Делай итерацию по всем онлайн игрокам (Bukkit.getOnlinePlayers()), получай их локацию, потом получай расстояние методом distance у объекта Location и уже сравнивай какое тебе расстояние нужно.
     
  8. Автор темы
    fold&false

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

    Баллы:
    61
    Имя в Minecraft:
    foldandfalse
    Спасибо, решил, тема закрыта
     
Статус темы:
Закрыта.

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