Tirol#5418
在发布插件或mod的更新后,及时通知用户是非常重要的特别是在修复一些重要BUG(如刷物品,提权等)的情况下,及时的更新可以避免无可挽回的损失

在插件版块不允许自动更新文件,但允许加入更新提示
本来以为要自己写一个服务来提供更新信息
在摸索后发现可以使用github的releases功能,它允许开发者创建和发布项目的正式版本,标明版本更新的详细信息、变更日志等
最重要的是他提供api获取最新的发布版本!


将Bukkit插件加入更新检测的过程分享给大家

首先在github为插件创建一个仓库 (这一步的话网上教程很多,就不献丑了)




















进入到这里,创建一个新的release










例如这次更新后的版本号是1.1,如图中填写,选择你的插件文件
点击 "Publish release" 发布










之后我们可以使用github提供的 API 获取最新的发布
在插件里写一个工具类,命名为 UpdateChecker,用于检测最新版本

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import org.bukkit.plugin.java.JavaPlugin;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

/**
* 更新检测
*/
public class UpdateChecker {

    // api 地址
    private static final String GITHUB_API = "https://api.github.com/repos/{github用户名}/{仓库名}/releases/latest";
   
    public static void checkUpdate(JavaPlugin plugin) {
        try {
            plugin.getLogger().info("正在检查更新");
            
            // 调用api
            URL url = new URL(GITHUB_API);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setReadTimeout(5000);
            connection.setRequestMethod("GET");

            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
            // 解析api响应信息
            Gson gson = new Gson();
            JsonObject jsonObject = gson.fromJson(reader,JsonObject.class);
            
            // 最新的发布版本号
            String latestVersion = jsonObject.get("tag_name").getAsString();
            // 更新信息
            String releaseNotes = jsonObject.get("body").getAsString();
            // 在plugin.yml获取现在使用的版本号
            String currentVersion = plugin.getDescription().getVersion();

            if (!latestVersion.equalsIgnoreCase(currentVersion)) {
                plugin.getLogger().info("检测到新版本: "+latestVersion);
                plugin.getLogger().info("更新内容: ");
                System.out.println(releaseNotes);
                plugin.getLogger().info("当前版本: "+currentVersion);
                plugin.getLogger().info("前往 www.bzd.com 获取新发布版本");
            } else {
                plugin.getLogger().info("当前已经是最新版本!");
            }

        } catch (Exception e) {
            plugin.getLogger().info("检测更新失败,请前往 www.bzd.com 查看更新");
        }
    }复制代码假设当前版本为 1.0,我们刚刚在github发布了1.1版本










在启动类中调用 checkUpdate 方法










载入插件










打印的格式好像还要调整一下...
现在你可以很方便的通知服主你更新了一个新的版本,有什么重要调整

第一页 上一页 下一页 最后一页