在发布插件或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 方法

载入插件

打印的格式好像还要调整一下...
现在你可以很方便的通知服主你更新了一个新的版本,有什么重要调整
在插件版块不允许自动更新文件,但允许加入更新提示
本来以为要自己写一个服务来提供更新信息
在摸索后发现可以使用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 方法

载入插件

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