package be.isach.ultracosmetics.util; import be.isach.ultracosmetics.UltraCosmetics; import be.isach.ultracosmetics.Version; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.permissions.ServerOperator; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.function.Predicate; /** * Package: be.isach.ultracosmetics.util * Created by: sachalewin * Date: 5/08/16 * Project: UltraCosmetics */ public class UpdateManager extends Thread { /** * Current UC version. */ private String currentVersion; /** * Whether the plugin is outdated or not. */ private boolean outdated; /** * Last Version published on spigotmc.org. */ private String lastVersion; public UltraCosmetics ultraCosmetics; public UpdateManager(UltraCosmetics ultraCosmetics) { this.ultraCosmetics = ultraCosmetics; this.currentVersion = ultraCosmetics.getDescription().getVersion() .replace("Beta ", "") .replace("Pre-", "") .replace("Release ", "") .replace("Hype Update (", "") .replace(")", ""); } /** * Checks for new update. */ public void checkForUpdate() { lastVersion = getLastVersion(); if (lastVersion != null) { int i = new Version(currentVersion).compareTo(new Version(lastVersion)); outdated = i == -1; if (lastVersion.equalsIgnoreCase("1.7.1") && currentVersion.startsWith("1.1")) outdated = false; } else outdated = false; if (outdated) { Bukkit.getOnlinePlayers().stream().filter((Predicate<Player>) ServerOperator::isOp).forEachOrdered(p -> p.sendMessage(ChatColor.BOLD + "" + ChatColor.ITALIC + "UltraCosmetics >" + ChatColor.RED + "" + ChatColor.BOLD + "An update is available: " + lastVersion)); } } /** * Gets last version published on Spigot. * * @return last version published on Spigot. */ public synchronized String getLastVersion() { try { HttpURLConnection con = (HttpURLConnection) new URL("http://www.spigotmc.org/api/general.php").openConnection(); con.setDoOutput(true); con.setConnectTimeout(2000); con.setRequestMethod("POST"); con.getOutputStream().write( ("key=98BE0FE67F88AB82B4C197FAF1DC3B69206EFDCC4D3B80FC83A00037510B99B4&resource=10905").getBytes("UTF-8")); String version = new BufferedReader(new InputStreamReader(con.getInputStream())).readLine().replace("Beta ", "").replace("Pre-", "").replace("Release ", "").replace("Hype Update (", "").replace(")", ""); if (version.length() <= 7) { return version; } } catch (Exception ex) { System.out.print("[UltraCosmetics] Failed to check for an update on spigot. "); } return null; } public synchronized boolean isOutdated() { return outdated; } public synchronized String getCurrentVersion() { return currentVersion; } }