Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 94 lines 3.7 kB view raw
1package com.legacyminecraft.poseidon.utility; 2 3import org.bukkit.craftbukkit.CraftServer; 4import org.json.simple.JSONObject; 5import org.json.simple.parser.JSONParser; 6 7import java.io.BufferedReader; 8import java.io.InputStreamReader; 9import java.net.HttpURLConnection; 10import java.net.URL; 11import java.util.concurrent.atomic.AtomicBoolean; 12import java.util.logging.Level; 13 14public class PoseidonVersionChecker { 15 16 private static final String GITHUB_API_URL = "https://api.github.com/repos/retromcorg/Project-Poseidon/releases/latest"; 17 private static final String releaseUrl = "https://github.com/retromcorg/Project-Poseidon/releases"; 18 private final String currentVersion; 19 private volatile String latestVersion; 20 private CraftServer server; 21 22 public PoseidonVersionChecker(CraftServer server, String currentVersion) { 23 this.currentVersion = currentVersion; 24 this.latestVersion = currentVersion; // Assume the latest version is the current version until checked 25 this.server = server; 26 } 27 28 /** 29 * Checks if a new version is available. 30 * 31 * @return true if a newer version is available, false otherwise. 32 */ 33 public synchronized boolean isUpdateAvailable() { 34 return latestVersion != null && !currentVersion.equalsIgnoreCase(latestVersion); 35 } 36 37 /** 38 * Fetches the latest release version from GitHub API. 39 * 40 * @return the latest version as a String or null if fetching fails. 41 */ 42 public void fetchLatestVersion() { 43 HttpURLConnection connection = null; 44 try { 45 URL url = new URL(GITHUB_API_URL); 46 connection = (HttpURLConnection) url.openConnection(); 47 connection.setRequestMethod("GET"); 48 connection.setRequestProperty("Accept", "application/json"); 49 connection.setConnectTimeout(5000); 50 connection.setReadTimeout(5000); 51 52 int responseCode = connection.getResponseCode(); 53 if (responseCode != HttpURLConnection.HTTP_OK) { 54 server.getLogger().log(Level.WARNING, "[Poseidon] Failed to check GitHub for latest version. HTTP Response Code: " + responseCode); 55 } 56 57 BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 58 StringBuilder response = new StringBuilder(); 59 String line; 60 61 while ((line = reader.readLine()) != null) { 62 response.append(line); 63 } 64 reader.close(); 65 66 JSONParser parser = new JSONParser(); 67 JSONObject json = (JSONObject) parser.parse(response.toString()); 68 69 this.latestVersion = (String) json.get("tag_name"); 70 71 if (isUpdateAvailable()) { 72 server.getLogger().log(Level.INFO, "[Poseidon] A new version is available: " + latestVersion); 73 server.getLogger().log(Level.INFO, "[Poseidon] You are currently running version: " + currentVersion); 74 server.getLogger().log(Level.INFO, "[Poseidon] Download the latest version here: " + releaseUrl); 75 } else { 76 server.getLogger().log(Level.INFO, "[Poseidon] You are running the latest version (" + currentVersion + ") of Project Poseidon."); 77 } 78 } catch (Exception e) { 79 server.getLogger().log(Level.WARNING, "[Poseidon] Failed to check GitHub for latest version.", e); 80 } finally { 81 if (connection != null) { 82 connection.disconnect(); 83 } 84 } 85 } 86 87 public String getCurrentVersion() { 88 return currentVersion; 89 } 90 91 public String getLatestVersion() { 92 return latestVersion; 93 } 94}