| package us.myles.ViaVersion.update; | |
| import org.bukkit.Bukkit; | |
| import org.bukkit.ChatColor; | |
| import org.bukkit.entity.Player; | |
| import org.bukkit.plugin.Plugin; | |
| import org.bukkit.scheduler.BukkitRunnable; | |
| import org.json.simple.JSONObject; | |
| import org.json.simple.parser.JSONParser; | |
| import org.json.simple.parser.ParseException; | |
| import us.myles.ViaVersion.api.ViaVersion; | |
| import java.io.BufferedReader; | |
| import java.io.IOException; | |
| import java.io.InputStreamReader; | |
| import java.net.HttpURLConnection; | |
| import java.net.MalformedURLException; | |
| import java.net.URL; | |
| import java.util.UUID; | |
| public class UpdateUtil { | |
| public final static String PREFIX = ChatColor.GREEN + "" + ChatColor.BOLD + "[ViaVersion] " + ChatColor.GREEN; | |
| private final static String URL = "http://api.spiget.org/v2/resources/"; | |
| private final static int PLUGIN = 19254; | |
| private final static String LATEST_VERSION = "/versions/latest"; | |
| public static void sendUpdateMessage(final UUID uuid, final Plugin plugin) { | |
| new BukkitRunnable() { | |
| @Override | |
| public void run() { | |
| final String message = getUpdateMessage(false); | |
| if (message != null) { | |
| new BukkitRunnable() { | |
| @Override | |
| public void run() { | |
| Player p = Bukkit.getPlayer(uuid); | |
| if (p != null) { | |
| p.sendMessage(PREFIX + message); | |
| } | |
| } | |
| }.runTask(plugin); | |
| } | |
| } | |
| }.runTaskAsynchronously(plugin); | |
| } | |
| public static void sendUpdateMessage(final Plugin plugin) { | |
| new BukkitRunnable() { | |
| @Override | |
| public void run() { | |
| final String message = getUpdateMessage(true); | |
| if (message != null) { | |
| new BukkitRunnable() { | |
| @Override | |
| public void run() { | |
| plugin.getLogger().warning(message); | |
| } | |
| }.runTask(plugin); | |
| } | |
| } | |
| }.runTaskAsynchronously(plugin); | |
| } | |
| private static String getUpdateMessage(boolean console) { | |
| if (ViaVersion.getInstance().getVersion().equals("${project.version}")) { | |
| return "You are using a debug/custom version, consider updating."; | |
| } | |
| String newestString = getNewestVersion(); | |
| if (newestString == null) { | |
| if (console) { | |
| return "Could not check for updates, check your connection."; | |
| } else { | |
| return null; | |
| } | |
| } | |
| Version current; | |
| try { | |
| current = new Version(ViaVersion.getInstance().getVersion()); | |
| } catch (IllegalArgumentException e) { | |
| return "You are using a custom version, consider updating."; | |
| } | |
| Version newest = new Version(newestString); | |
| if (current.compareTo(newest) < 0) | |
| return "There is a newer version available: " + newest.toString() + ", you're on: " + current.toString(); | |
| else if (console && current.compareTo(newest) != 0) { | |
| if (current.getTag().toLowerCase().startsWith("dev") || current.getTag().toLowerCase().startsWith("snapshot")) { | |
| return "You are running a development version, please report any bugs to GitHub."; | |
| } else { | |
| return "You are running a newer version than is released!"; | |
| } | |
| } | |
| return null; | |
| } | |
| private static String getNewestVersion() { | |
| try { | |
| URL url = new URL(URL + PLUGIN + LATEST_VERSION + "?" + System.currentTimeMillis()); | |
| HttpURLConnection connection = (HttpURLConnection) url.openConnection(); | |
| connection.setUseCaches(true); | |
| connection.addRequestProperty("User-Agent", "ViaVersion " + ViaVersion.getInstance().getVersion()); | |
| connection.setDoOutput(true); | |
| BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); | |
| String input; | |
| String content = ""; | |
| while ((input = br.readLine()) != null) { | |
| content = content + input; | |
| } | |
| br.close(); | |
| JSONParser parser = new JSONParser(); | |
| JSONObject statistics; | |
| try { | |
| statistics = (JSONObject) parser.parse(content); | |
| } catch (ParseException e) { | |
| e.printStackTrace(); | |
| return null; | |
| } | |
| return (String) statistics.get("name"); | |
| } catch (MalformedURLException e) { | |
| return null; | |
| } catch (IOException e) { | |
| return null; | |
| } | |
| } | |
| } |