Вопрос Как сделать авто-обновление плагина

Версия Minecraft
1.16.X

Ght

Пользователь
Сообщения
157
Решения
11
Хотелось бы впихнуть авто-обновление в свой плагин - через гитхаб(и если не трудно то объясните как с гитом работать, ибо я не работал с ним никогда)
 
Решение
Ну, это делается не сложнее, чем проверка на обновление с SpigotMC. У GitHub есть API для получения последнего релиза: " {owner}/{repo}/releases/latest" (подробнее можешь прочитать * *). Нам достаточно сделать запрос, получить последний релиз, затем получить его тэг, и, если тебе нужно, что-то ещё. Я, например, получил ссылку на скачивание нового JAR-файла. Теперь, когда у нас есть тэг последнего релиза, мы можем сравнить его с текущей версией в plugin.yml. Для этого в спигот есть .

Java:
public void checkUpdate() throws URISyntaxException, IOException, InterruptedException {
    HttpRequest request = HttpRequest.newBuilder()
            .uri(new...
Ну, это делается не сложнее, чем проверка на обновление с SpigotMC. У GitHub есть API для получения последнего релиза: " {owner}/{repo}/releases/latest" (подробнее можешь прочитать * *). Нам достаточно сделать запрос, получить последний релиз, затем получить его тэг, и, если тебе нужно, что-то ещё. Я, например, получил ссылку на скачивание нового JAR-файла. Теперь, когда у нас есть тэг последнего релиза, мы можем сравнить его с текущей версией в plugin.yml. Для этого в спигот есть .

Java:
public void checkUpdate() throws URISyntaxException, IOException, InterruptedException {
    HttpRequest request = HttpRequest.newBuilder()
            .uri(new URI("https://api.github.com/repos/AuthMe/AuthMeReloaded/releases/latest"))
            .GET()
            .build();

    String body = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()).body();
    JsonObject json = new JsonParser().parse(body).getAsJsonObject();

    String latestVersion = json.get("tag_name").getAsString();
    String downloadLink = json
            .getAsJsonArray("assets")
            .get(0).getAsJsonObject()
            .get("browser_download_url").getAsString();

    if (!getDescription().getVersion().equals(latestVersion)) {
        getLogger().info("New version is available!");
        getLogger().info("You can download it here: " + downloadLink);
    }
}
 
Но можно ли как-то сделать подкачку .jar через команду?
Да, ты можешь сделать подкачку. Отгружаешь плагин, затем скачиваешь новый плагин в директорию с плагинами и заново загружаешь плагин.

Для скачивания файла можешь воспользоваться .
Ну и да, чтоб не писать ту портянку (HttpClient, HttpRequest) можешь просто воспользоваться каким-нибудь из Guava.
 
  • Мне нравится (+1)
Реакции: Ght
Мне надо же импортировать HttpRequest
Ну, если ты решил так отправлять запрос, то да. Может у тебя версия Java старая? Он появился только в .
 
Код:
public void checkUpdate() throws URISyntaxException, IOException, InterruptedException {
    HttpRequest request = HttpRequest.newBuilder()
            .uri(new URI("https://api.github.com/repos/AuthMe/AuthMeReloaded/releases/latest"))
            .GET()
            .build();

    String body = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()).body();
    JsonObject json = new JsonParser().parse(body).getAsJsonObject();

    String latestVersion = json.get("tag_name").getAsString();
    String downloadLink = json
            .getAsJsonArray("assets")
            .get(0).getAsJsonObject()
            .get("browser_download_url").getAsString();

    if (!getDescription().getVersion().equals(latestVersion)) {
        getLogger().info("New version is available!");
        getLogger().info("You can download it here: " + downloadLink);
    }
}
Скопировал пример - ничего не работает, в консоли не выводи об обновлении ;/
Объединено

Java:
public class UpdatePlugin {

    public void checkUpdate() throws URISyntaxException, IOException, InterruptedException {
        HttpRequest request = HttpRequest.newBuilder()
                .uri(new URI("https://api.github.com/repos/FluffyNo/AntiBhop/releases/latest"))
                .GET()
                .build();

        String body = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()).body();
        JsonObject json = new JsonParser().parse(body).getAsJsonObject();

        String latestVersion = json.get("tag_name").getAsString();
        String downloadLink = json
                .getAsJsonArray("assets")
                .get(0).getAsJsonObject()
                .get("browser_download_url").getAsString();

        if (!this.getDescription().getVersion().equals(latestVersion)) {
            Bukkit.getLogger().info("New version is available!");
            Bukkit.getLogger().info("You can download it here: " + downloadLink);
        }
    }

    private Bukkit getDescription() {
        return getDescription();
    }
}
 
Java:
Код:
public class UpdatePlugin {

    public void checkUpdate() throws URISyntaxException, IOException, InterruptedException {
        HttpRequest request = HttpRequest.newBuilder()
                .uri(new URI("https://api.github.com/repos/FluffyNo/AntiBhop/releases/latest"))
                .GET()
                .build();

        String body = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()).body();
        JsonObject json = new JsonParser().parse(body).getAsJsonObject();

        String latestVersion = json.get("tag_name").getAsString();
        String downloadLink = json
                .getAsJsonArray("assets")
                .get(0).getAsJsonObject()
                .get("browser_download_url").getAsString();

        if (!this.getDescription().getVersion().equals(latestVersion)) {
            Bukkit.getLogger().info("New version is available!");
            Bukkit.getLogger().info("You can download it here: " + downloadLink);
        }
    }

    private Bukkit getDescription() {
        return getDescription();
    }
}

Я надеюсь, ты метод checkUpdate() вызываешь в onEnable()? Если да, то странно. Может в plugin.yml версия выше latest версии на GitHub?
 
  • Мне нравится (+1)
Реакции: Ght
Это метод возвращающий себя же?
Вам необходимо зарегистрироваться для просмотра изображений-вложений


Если ты запускаешь метод проверки обновления синхронно, то у тебя должен упасть сервер с ошибкой оверстака, если асинхронно, то метод проверки обновления зацикливается тут и до сообщений не доходит
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
Я надеюсь, ты метод checkUpdate() вызываешь в onEnable()? Если да, то странно. Может в plugin.yml версия выше latest версии на GitHub?
Метод неправильно немного вызывал,

Java:
checkUpdate(); изменил на ->
        try {
            checkUpdate();
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
 
Назад
Сверху Снизу