Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Лооол. Рили такая есть проблема? Пока с таким не сталкивался....
Она еще не релизная, все может изменится. Да и все это делается проще без всяких сетов арайсов и прочей лабуды.
Java:
    static {
        for(Package pack : Package.getPackages()) {
            String name = pack.getName();
            if(name.startsWith("net.minecraft.server")) {
                version = pack.getName().substring(21);
                break;
            }
        }
    }
 
Последнее редактирование:
Она еще не релизная, все может изменится. Да и все это делается проще без всяких сетов арайсов и прочей лабуды.
Java:
    static {
        for(Package pack : Package.getPackages()) {
            String name = pack.getName();
            if(name.contains("net.minecraft.server")) {
                version = pack.getName().substring(21);
                break;
            }
        }
    }
С contains улыбнулся, спасибо, настроение++.
 
Только, ИМХО, лучше обойтись без магических чисел и сделать что-то типа:

Java:
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, приведи свой пост к какому-то окончательному варианту, чтобы я его добавил в шапку. Или так оставишь?
 
Bukkit.getServer().getClass().getName().replace("org.bukkit.craftbukkit", "net.minecraft.server"); ???
 
Только, ИМХО, лучше обойтись без магических чисел и сделать что-то типа:

Java:
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, приведи свой пост к какому-то окончательному варианту, чтобы я его добавил в шапку. Или так оставишь?
А смысл? Длинна же не динамическая.
 
Определение версии nms почти без проблем или "для тех, кто столкнулся с какулей от md_5 при определении версии nms из версии сервера":

Java 8 Stream:
Java:
public static String getNmsVersion() {
    String nmsPackage = "net.minecraft.server";
    String pckg = Arrays.stream(Package.getPackages())
            .filter(pk -> pk.getName().startsWith(nmsPackage))
            .map(pk -> pk.getName()).findFirst().orElse(null);

    if (pckg == null) {
        throw new RuntimeException("Failed to recognize nms version");
    }

    return pckg.substring(nmsPackage.length() + 1);
}
Java 7:
Java:
public static String getNmsVersion() {
    String nmsPackage = "net.minecraft.server";
    for (Package pack : Package.getPackages()) {
        if (pack.getName().startsWith(nmsPackage)) {
            return pack.getName().substring(nmsPackage.length() + 1);
        }
    }
    throw new RuntimeException("Failed to recognize nms version");
}
xDark:
Java:
//Кто нибудь проверьте на правильность
public static String getNmsVersion() {
    return Bukkit.getServer().getClass().getName()
            .replace("org.bukkit.craftbukkit.", "")
            .replace(".CraftServer", "");
}
Bukkit.getServer().getClass().getPackage().getNane().replace("org.bukkit.craftbukkit", "net.minecraft.server");
 
А такое чтоли больше не работает?
Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
 
Bukkit.getServer().getClass().getPackage().getNane().replace("org.bukkit.craftbukkit", "net.minecraft.server");
Суть в том чтобы получить v1_12_R1, а не net.minecraft.server.v1_12_R1.
А такое чтоли больше не работает?
Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
А зачем реплейсить?
 
Погоди, сейчас фаталити будет :D.
String s = Bukkit.getServer().getClass().getName();
s.substring(23, s.length()-12);
Ну всё. Теперь я потрачу годы на то чтобы разобраться в этом коде.
А теперь серьезно. Ты правда считаешь, что я не мог бы понять тот код без доп. переменной? Правда не понимаешь почему магические числа это плохо? Или прикидываешься?
 
Ну всё. Теперь я потрачу годы на то чтобы разобраться в этом коде.
А теперь серьезно. Ты правда считаешь, что я не мог бы понять тот код без доп. переменной? Правда не понимаешь почему магические числа это плохо? Или прикидываешься?
Рили не понимаю, в чем касяк резать строку постоянной длинны статическими цифрами. Вот если бы там была неопределенная переменная, но это не так.
 
Рили не понимаю, в чем касяк резать строку постоянной длинны статическими цифрами. Вот если бы там была неопределенная переменная, но это не так.
Проблема в стиле кода. Я в любом случае написал бы с переменной, чтобы даже не требовалось думать откуда взялась цифра 21 и не нужно было её считать вручную. А так это получается сразу два антипаттерна: хардкод и магические числа.
Да, в этом случае можно было просто проигнорировать, потому что кусок кода маленький и простой, но мне проще в любом коде соблюдать один стиль и не делать поблажек для конкретных кусков.
 
Проблема в стиле кода. Я в любом случае написал бы с переменной, чтобы даже не требовалось думать откуда взялась цифра 21 и не нужно было её считать вручную. А так это получается сразу два антипаттерна: хардкод и магические числа.
Да, в этом случае можно было просто проигнорировать, потому что кусок кода маленький и простой, но мне проще в любом коде соблюдать один стиль и не делать поблажек для конкретных кусков.
С тобой все ясно.
 

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

Назад
Верх