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

Плагин [FUN] SuperNear v2.0 - Продвинутый /near [1.12.2]

Тема в разделе "Неподтвержденные плагины", создана пользователем Bezobrazie, 16 июн 2021.

  1. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    Плагин усовершенствует обычный /near из Essentials. Что он может? Показывать игроков на дистанции от 1 до 1000 смотря какой вы Perm дадите той или иной группе.
    Также отображает сторону где находится игрок.
    upload_2021-7-4_17-35-7.png upload_2021-7-4_17-35-28.png
    Как его использовать?
    • Установите его в свою папку plugins
    • Создайте перм и его радиус действия в конфиге
    • Выдайте перм игроку
    • Готово!
    Perms:
    near.usage - позволяет использовать команду /near
    near.reload - позволяет перезагружать конфиг
    near.hide - позволяет использовать команду /nearhide
    near.invisibility - Вы невидимы для всех.
    near.usage.position - позволяет использовать команду /nearposition

    Команды:
    /near || /nt - Показывает игроков рядом с отображением стороны.
    /near reload - Перезагрузка конфига.
    /nearhide <Секунды> || /nth <Секунды> - позволяет скрыть себя из /near на некоторое время.(Также можно скрыть другого игрока написав в конце его ник.)
    /nearposition || /ntp - Показывает игроков рядом с отображением координат.



    Код:
    [/LEFT]
    PlayerMessage: '§b➣ §7%PlayerName% &c%Distance% &7'
    Empty: '&7пусто'
    NearMessage: '§7Игроки в радиусе §d%RADIUS%§7 блоков: '
    NoPerm: '&cУ вас нет прав!'
    position: 'X:&d%X% &7Y:&d%Y% &7Z:&d%Z%'
    #ПОКАЗЫВАТЬ ЛИ ИГРОКОВ В ГМ 3
    gamemode3: false
    #ПОКАЗЫВАТЬ ЛИ ИГРОКОВ В НЕВИДИМОСТИ
    invisibility: false
    # РАСПОЛОГАТЬ ПЕРМИШОНЫ ПО ВОЗРАСТАНИЮ
    # <НАЗВАНИЕ ПЕРМА (БЕЗ ТОЧКИ)>: <РАДИУС ЦЕЛЫМ ЧИСЛОМ>
    # ПОСЛЕ СОЗДАНИЯ ПРОПИСЫВАЕМ /NEAR RELOAD И ВЫДАЕМ ИГРОКАМ ПЕРМЫ
    perms:
      SuperNear100: 100
      SuperNear200: 200
      SuperNear300: 300
      SuperNear400: 400
      SuperNear500: 500
      SuperNear600: 600
    Exception:
    - Пусто...
    [LEFT]
    [16.06.2021] - v1.1 Проведена работа над оптимизацией кода.
    [30.06.2021] - v1.2 Проведена работа над оптимизацией кода.
    Немного изменил работу с конфигами чтобы лишний раз не нагружать сервер.(Пересоздайте кфг)
    [4.07.2021] - v2.0 Добавлены команды /nearHide и /nearPosition.
    Ура! Теперь есть отображение в какой стороне игрок.(Могут быть баги с отображением стороны. Они логируются в кфг строчкой "Exception". Скидывайте сюда если что).
    Добавлены новые настройки в конфиг, пересоздайте его.
    Добавлены сокращения команд.
    СКАЧАТЬ + SRC
    Принимаю
    критику моего кода, мб где-то накосячил и тд
     
    Последнее редактирование: 4 июл 2021
  2. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Зачем-то берешь свой плагин дважды. Main main можно убрать и оставить только Main plugin, добавив ему final.
    PHP:
    // L12
    private Main plugin;
    private 
    Main main = (Main)Main.getPlugin(Main.class);

    public 
    Shop(Main main) {
        
    this.plugin main;
    }
    @|Override
    PHP:
    // L19

    public boolean onCommand(CommandSender senderCommand cmdString labelString[] args) {
    Для построения строк следует пользоваться StringBuilder'ом.
    PHP:
    // L22
    String near = new String();
    // L42
    near near Online.getName()+ ColourBracket +"(" ColourDistanse distanse(p.getLocation(), Online.getLocation()) + ColourBracket  ") " ;
    Опционально, строки стоит закэшировать и использовать ChatColor.translateAlternateColorCodes(char, String)
    PHP:
    // L26
    String ColourBracket main.getConfig().getString("ColourBracket").replace("&""§");
    String ColourDistanse main.getConfig().getString("ColourDistanse").replace("&""§");
    String Empty = main.getConfig().getString("Empty").replace("&""§");
    // L35
    String NearMessage main.getConfig().getString("NearMessage").replace("&""§").replace("%RADIUS%"rad+"");
    // L53
    String NoPerm main.getConfig().getString("NoPerm").replace("&""§");
    Может делать больно серверу. Либо сделай через группы (взгляни как сделаны точки дома в Essentials), либо используй бинарный поиск.
    PHP:
    // L29
    for(int radius 1radius <= 1000radius++) {
        if(
    p.hasPermission("near." radius)) {
            
    rad radius;
        }

    }
    Непонятно, зачем это вообще, ибо Location#distance(Location) делает тоже самое
    PHP:
    // L70
    public int distanse(Location loc1Location loc2) {
        
    float Xentity loc1.getBlockX();
        
    float Yentity loc1.getBlockY();
        
    float Zentity loc1.getBlockZ();
        
    float Xdamager loc2.getBlockX();
        
    float Ydamager loc2.getBlockY();
        
    float Zdamager loc2.getBlockZ();
        
    float distanse = (float) Math.sqrt(Math.pow((Xentity Xdamager), 2) + Math.pow((Yentity Ydamager), 2) + Math.pow((Zentity Zdamager), 2));
        return (int) 
    distanse;
    }
    Для получения игроков в мире просто воспользуйся World#getPlayers(). Зачем здесь пустое поле после if? - простой перед проверкой добавь знак !, да и игроков можно просто сравнить p != Online (в идеале через итератор или for-i прервать поиск при обнаружении ищущего игрока, и продолжить поиск уже без этой проверки). Алсо подсчет дистанции следует сделать несколько иначе - сохранить результат Location#distance(Location) в переменную, и уже её использовать для сравнения и добавления в строку. В идеале нужно сравнивать Location#distanceSquared(Location) с квадратным радиусом, и лишь в случае успеха выводить корень для добавления в строку.
    PHP:
    // L36
    for(Player Online Bukkit.getOnlinePlayers()) {
        if(
    p.getWorld() == Online.getWorld()) {
            if(
    distanse(p.getLocation(), Online.getLocation()) <= rad) {
                if(
    p.getName().equalsIgnoreCase(Online.getName())) {

                }else {
                    
    near near Online.getName()+ ColourBracket +"(" ColourDistanse distanse(p.getLocation(), Online.getLocation()) + ColourBracket  ") " ;
                }
            }
        }
    }
    String#isEmpty()/StringBuilder#isEmpty()
    PHP:
    // L47
    if(near.equalsIgnoreCase("")) {
    else
    PHP:
    // L56
    }
    if(
    args.length == 1) {
    Ну, и в общем не стоит называть переменные с большой буквы. Также не стоит называть переменные p, e (если только это не джинерики) и подобно, просто потому что это может вредить пониманию кода в будущем. Название класса команды не отражает его суть, да и в принципе команду не было большого смысла отделять от основного класса, ибо плагин только из неё по сути и состоит.
     
  3. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    ух ёёёёёёё. Ну получается урыл.
     
  4. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    Мои знания Java не настолько хороши, ну ниче щас буду гуглить что ты вообще сказал)
     
  5. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    Добавил
    Убрал, добавил метод distance
    Переписал
    Убрал
    Переписал
    Переписал
    Добавил
    ////
    Сделал все что понял.
     
  6. MrTsegan

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

    Баллы:
    66
    Имя в Minecraft:
    MrFiuzer
    Попробуешь сделать, чтобы показывалось, где игрок?
     
  7. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    [30.06.2021] - v1.2 Проведена работа над оптимизацией кода.
    Немного изменил работу с конфигами чтобы лишний раз не нагружать сервер.(Пересоздайте кфг)
    уже работаю над этим.
     
  8. MrTsegan

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

    Баллы:
    66
    Имя в Minecraft:
    MrFiuzer
    если сделаешь, буду ооооооооооочень благодарен
     
  9. deadanykey

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

    Баллы:
    96
    Чем плох replace()?
     
  10. LOVEC3327

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

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Тем, что он заменяет все & на §
     
  11. deadanykey

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

    Баллы:
    96
    Как и должно быть, всё правильно. Но ответа я так и не услышал - почему это хуже?
    Я контролирую сообщения и гарантирую, что знак "&" будет только в объявлении цвета.
     
  12. LOVEC3327

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

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Ну так translateAlternateColorCodes заменяет знак только в том случае, если в результате замены будет цветовой код. Достаточно просто посмотреть код этих двух методов, чтобы понять их различие.
     
  13. MrTsegan

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

    Баллы:
    66
    Имя в Minecraft:
    MrFiuzer
    Нучто там с отображением игроков?
     
  14. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    Осталось пофиксить несколько багов и сделать потдержку конфигов. И да у меня и свои дела есть
    upload_2021-7-3_18-34-8.png
     
  15. MrTsegan

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

    Баллы:
    66
    Имя в Minecraft:
    MrFiuzer
    Круто, спасибо большое, извини что прстал. Ну ты просто красавчик, рили!
     
  16. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    Видел.
    Будет.
    будет
    Будет, но режим вкыл/выкл.
     
  17. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    [4.07.2021] - v2.0 Добавлены команды /nearHide и /nearPosition.
    Ура! Теперь есть отображение в какой стороне игрок.(Могут быть баги с отображением стороны. Они логируются в кфг строчкой "Exception". Скидывайте сюда если что).
    Добавлены новые настройки в конфиг, пересоздайте его.
    Добавлены сокращения команд.
     
  18. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    ктото на ней еще сидит? ну могу попробовать.
     
  19. Автор темы
    Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
  20. Siiimply

    Siiimply Активный участник

    Баллы:
    61
    Имя в Minecraft:
    vladislavvc
    Не понял как добавить пермишн в LuckPerms. Перепробовал все варианты, добавлял "SuperNear750" — не работало. Сделал "SuperNear.750", тоже не сработало. Написал уже по другому: "near.supernear750" — опять-же таки - не сработало. Подскажи, как правильно написать?
     

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