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

Помогите Получение UUID по нику

Тема в разделе "Разработка плагинов для новичков", создана пользователем ilya50, 11 июл 2019.

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

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

    Баллы:
    76
    Как можно получить UUID игрока зная только никнейм(при условии что игрока вообще никогда не было на сервере)
     
  2. PifPafich

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

    Баллы:
    66
    Имя в Minecraft:
    steklopaKet32_46
    Это никак
     
  3. HauserGrim

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

    Баллы:
    96
    Разве что некоторые плагины хранят uuid и можно их получить от них, но это работает только с уже игравшими игроками.
    Потом нужно будет погуглить про генерацию uuid на пиратке, мб чёт интересное найду
     
  4. Nikolai_Faint

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

    Баллы:
    96
    Mojang API для кого делали?
    https://wiki.vg/Mojang_API
     
  5. GHOST-MEN

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

    Баллы:
    76
  6. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    PHP:
            String name "Notch";
            
    boolean onlineMode Bukkit.getOnlineMode();
            
    Long timestamp null;
            try {
                
    UUID uuid MojangAPI.getPlayerUuid(nameonlineModenull);
                if (
    uuid == null)
                    
    System.out.println("Игрок с таким ником не существует");
                else
                    
    System.out.println((onlineMode "Лицензионный " "Пиратский") + " UUID игрока " name ": " uuid.toString());

            } catch (
    IOException e) {
                
    System.out.println("Не удалось получить UUID игрока + " name ". Похоже, сервера Mojang недоступны");
            }
    PHP:
        /**
         * @param name       Никнейм игрока
         * @param onlineMode Включить ли запрос UUID с серверов Mojang или сгенерировать
         * @param timestamp  Время в UNIX-формате (без миллисекунд). null для текущего времени
         * @return UUID игрока. Либо null, если игрок не найден на серверах Mojang
         * @throws IOException В случае, если сервера Mojang недоступны или был вернут некорректный ответ
         */
        
    @Nullable
        
    public static UUID getPlayerUuid(@Nonnull String nameboolean onlineMode, @Nullable Long timestampthrows IOException {
            if (!
    onlineMode) return UUID.nameUUIDFromBytes(("OfflinePlayer:" name).getBytes(Charsets.UTF_8));
            try (
    BufferedReader reader createReader("https://api.mojang.com/users/profiles/minecraft/" name
                    
    + (timestamp == null "" "?at=" timestamp))) {
                
    JsonElement element readJson(reader);
                if (
    element == null) return null//Игрок не найден
                
    JsonObject jsonObject element.getAsJsonObject();
                if (
    jsonObject == null) return null;
                if (!
    jsonObject.has("id"))
                    throw new 
    IOException("Некорректные данные профиля игрока " name);
                
    String uuid jsonObject.get("id").getAsString();
                return 
    parseUUID(uuidfalse);
            } catch (
    IOException e) {
                throw new 
    IOException("Сервера Mojang недоступны"e);
            }
        }

        
    /**
         * @param reader Ридер, при помощи которого производить чтение
         * @return JsonElement после парсинга или null, если ответ не поступил
         * @throws IOException если не удалось выполнить чтение ридером
         */
        
    @Nullable
        
    private static JsonElement readJson(@Nonnull BufferedReader readerthrows IOException {
            
    String jsonInput reader.readLine();
            if (
    jsonInput == null || jsonInput.isEmpty()) return null;
            return new 
    JsonParser().parse(jsonInput);
        }

        
    /**
         * @param url URL для подключения
         * @return Ридер по указанному URL
         * @throws IOException при приблемах поделючения
         */
        
    @Nonnull
        
    private static BufferedReader createReader(@Nonnull String urlthrows IOException {
            return new 
    BufferedReader(new InputStreamReader(new URL(url).openStream()));
        }

        
    /**
         * @param input        Строка с UUID
         * @param hasSplitters Создержит ли строка разделители '-'
         * @return UUID в виде объекта
         */
        
    @Nonnull
        
    private static UUID parseUUID(@Nonnull String inputboolean hasSplitters) {
            if (
    hasSplitters) {
                if (
    input.length() != 36) throw new IllegalArgumentException("Некорректный UUID: " input);
            } else {
                if (
    input.length() != 32) throw new IllegalArgumentException("Некорректный UUID: " input);
                
    input input.replaceAll("(.{8})(.{4})(.{4})(.{4})(.+)""$1-$2-$3-$4-$5");
            }
            return 
    UUID.fromString(input);
        }
     
    Последнее редактирование: 11 июл 2019

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