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

Стартап [WIP] Code Snippets - Полезные куски кода и некоторые неочевидные вещи. [+ Ликбез]

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

  1. alexandrage

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

    Баллы:
    173
    Она еще не релизная, все может изменится. Да и все это делается проще без всяких сетов арайсов и прочей лабуды.
    Код:
        static {
            for(Package pack : Package.getPackages()) {
                String name = pack.getName();
                if(name.startsWith("net.minecraft.server")) {
                    version = pack.getName().substring(21);
                    break;
                }
            }
        }
     
    Последнее редактирование: 7 июн 2017
  2. Dereku

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

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    С contains улыбнулся, спасибо, настроение++.
     
  3. Автор темы
    OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Только, ИМХО, лучше обойтись без магических чисел и сделать что-то типа:

    Код:
    public static String getNmsVersion() {
        String nmsPackage = "net.minecraft.server";
        for(Package pack : Package.getPackages()) {
            String name = pack.getName();
            if(name.startsWith(nmsPackage)) {
                int versionIndex = nmsPackage.length() + 1;
                return pack.getName().substring(versionIndex);
            }
        }
    }

    @Dereku, приведи свой пост к какому-то окончательному варианту, чтобы я его добавил в шапку. Или так оставишь?
     
  4. xDark

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

    Баллы:
    96
    Bukkit.getServer().getClass().getName().replace("org.bukkit.craftbukkit", "net.minecraft.server"); ???
     
  5. Dereku

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

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Допилил все три варианта.
     
  6. alexandrage

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

    Баллы:
    173
    А смысл? Длинна же не динамическая.
     
  7. Автор темы
    OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Смысл в том, что нет магических чисел, вследствие чего код более понятен.
    @Dereku, закрепил
     
  8. alexandrage

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

    Баллы:
    173
    Он и так понятен был, всем кроме тебя).
     
  9. Автор темы
    OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Ну вот такой я быдлокодер, да. Магические числа и прочие антипаттерны не люблю. Стыдно мне за это
     
  10. alexandrage

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

    Баллы:
    173
    Погоди, сейчас фаталити будет :D.
    String s = Bukkit.getServer().getClass().getName();
    s.substring(23, s.length()-12);
     
  11. xDark

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

    Баллы:
    96
    Bukkit.getServer().getClass().getPackage().getNane().replace("org.bukkit.craftbukkit", "net.minecraft.server");
     
  12. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    А такое чтоли больше не работает?
    Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
     
  13. Dereku

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

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Суть в том чтобы получить v1_12_R1, а не net.minecraft.server.v1_12_R1.
    А зачем реплейсить?
     
  14. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    Я хз. Нашел этот метод 2 года назад и юзаю все еще. Да и в других плагинах вроде также почемуто делают.
    https://www.spigotmc.org/wiki/nms-on-different-versions-without-reflection/
    Вот тут это было.
     
  15. alexandrage

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

    Баллы:
    173
    Ты не понял, это было кккомбо против OsipXD :D.
    Не осилили такое split("\\."), вот и закостылили.
     
  16. Dereku

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

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Ну я так же подумал.
     
  17. Автор темы
    OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Ну всё. Теперь я потрачу годы на то чтобы разобраться в этом коде.
    А теперь серьезно. Ты правда считаешь, что я не мог бы понять тот код без доп. переменной? Правда не понимаешь почему магические числа это плохо? Или прикидываешься?
     
  18. alexandrage

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

    Баллы:
    173
    Рили не понимаю, в чем касяк резать строку постоянной длинны статическими цифрами. Вот если бы там была неопределенная переменная, но это не так.
     
  19. Автор темы
    OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Проблема в стиле кода. Я в любом случае написал бы с переменной, чтобы даже не требовалось думать откуда взялась цифра 21 и не нужно было её считать вручную. А так это получается сразу два антипаттерна: хардкод и магические числа.
    Да, в этом случае можно было просто проигнорировать, потому что кусок кода маленький и простой, но мне проще в любом коде соблюдать один стиль и не делать поблажек для конкретных кусков.
     
  20. alexandrage

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

    Баллы:
    173
    С тобой все ясно.
     

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