Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

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

  1. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Она еще не релизная, все может изменится. Да и все это делается проще без всяких сетов арайсов и прочей лабуды.
    Код:
        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. Хостинг MineCraft
    <
  3. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    С contains улыбнулся, спасибо, настроение++.
     
  4. Автор темы
    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);
            }
        }
    }
    [DOUBLEPOST=1496867242,1496866319][/DOUBLEPOST]@Dereku, приведи свой пост к какому-то окончательному варианту, чтобы я его добавил в шапку. Или так оставишь?
     
  5. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Bukkit.getServer().getClass().getName().replace("org.bukkit.craftbukkit", "net.minecraft.server"); ???
     
  6. Dereku

    Dereku Старожил

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

    alexandrage Администратор

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

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

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

    alexandrage Администратор

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

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

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

    alexandrage Администратор

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

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Bukkit.getServer().getClass().getPackage().getNane().replace("org.bukkit.craftbukkit", "net.minecraft.server");
     
  13. slavik123123123

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

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

    Dereku Старожил

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

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

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

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Ты не понял, это было кккомбо против OsipXD :D.[DOUBLEPOST=1496922387,1496921881][/DOUBLEPOST]
    Не осилили такое split("\\."), вот и закостылили.
     
  17. Dereku

    Dereku Старожил

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

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

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

    alexandrage Администратор

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

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

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

    alexandrage Администратор

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

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