Files
MoreMobHeads/util/VersionChecker.java
T
2024-05-13 19:30:20 -05:00

223 lines
8.8 KiB
Java

package com.github.joelgodofwar.mmh.util;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.bukkit.ChatColor;
import org.bukkit.plugin.java.JavaPlugin;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.github.joelgodofwar.mmh.MoreMobHeads;
@SuppressWarnings("unused")
public class VersionChecker {
private String pluginName;
private JavaPlugin plugin;
private int projectID;
private String currentVersion;
private String githubURL; // = "https://github.com/JoelGodOfwar/MoreMobHeads/raw/master/versioncheck/1.15/versions.xml";
String versionType;
private List<String> releaseList = new ArrayList<>();
private List<String> developerList = new ArrayList<>();
private String recommendedVersion = "uptodate";
private MoreMobHeads mmh;
public VersionChecker(MoreMobHeads plugin, int projectID, String githubURL) {
this.mmh = plugin;
this.projectID = projectID;
this.currentVersion = plugin.getDescription().getVersion();
this.githubURL = githubURL;
}
public VersionChecker(String plugin, int projectID, String githubURL) {
this.currentVersion = plugin;
this.projectID = projectID;
this.githubURL = githubURL;
}
public String getReleaseUrl() {return "https://dev.bukkit.org/projects/moremobheads2";}
public boolean checkForUpdates() throws Exception {
URL url = new URL(githubURL);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
URLConnection connection = url.openConnection();
connection.setUseCaches(false);
connection.setRequestProperty("Cache-Control", "no-cache, no-store, must-revalidate");
Document doc = db.parse(connection.getInputStream());
doc.getDocumentElement().normalize();
NodeList releaseNodes = doc.getElementsByTagName("release");
for (int i = 0; i < releaseNodes.getLength(); i++) {
Node node = releaseNodes.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
releaseList.add(element.getElementsByTagName("version").item(0).getTextContent().replace("<version>", "").replace("</version>", ""));
releaseList.add(element.getElementsByTagName("notes").item(0).getTextContent().replace("<notes>", "").replace("</notes>", ""));
releaseList.add(element.getElementsByTagName("link").item(0).getTextContent().replace("<link>", "").replace("</link>", ""));
}
}
NodeList developerNodes = doc.getElementsByTagName("developer");
for (int i = 0; i < developerNodes.getLength(); i++) {
Node node = developerNodes.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
developerList.add(element.getElementsByTagName("version").item(0).getTextContent().replace("<version>", "").replace("</version>", ""));
developerList.add(element.getElementsByTagName("notes").item(0).getTextContent().replace("<notes>", "").replace("</notes>", ""));
developerList.add(element.getElementsByTagName("link").item(0).getTextContent().replace("<link>", "").replace("</link>", ""));
}
}
if (connection != null) {
connection.getInputStream().close();
}
String releaseVersion = releaseList.get(0);
String developerVersion = developerList.get(0);
mmh.LOGGER.debug(ChatColor.RED + "currentVersion=" + currentVersion);
mmh.LOGGER.debug(ChatColor.RED + "releaseVersion=" + releaseVersion);
mmh.LOGGER.debug(ChatColor.RED + "developerVersion=" + developerVersion);
if (currentVersion.compareTo(releaseVersion) < 0) {
recommendedVersion = "release";
return true;
} else if (currentVersion.equals(releaseVersion)) {
recommendedVersion = "uptodate";
return false;
} else if (currentVersion.contains(".D")) {
String[] splitCurrentVersion = currentVersion.split("\\.D");
String currentReleaseVersion = splitCurrentVersion[0];
String[] splitDeveloperVersion = developerVersion.split("\\.D");
String developerReleaseVersion = splitDeveloperVersion[0];
if (currentReleaseVersion.equals(releaseVersion) && (developerReleaseVersion.compareTo(currentReleaseVersion) <= 0)) {
recommendedVersion = "release";
return true;
} else if ((developerReleaseVersion.compareTo(releaseVersion) < 0) && developerReleaseVersion.equals(currentReleaseVersion)) {
recommendedVersion = "You are Up To Date";
return false;
} else if (developerVersion.compareTo(currentVersion) > 0) {
recommendedVersion = "developer";
return true;
}
}
return false;
}
public List<String> getReleaseList() {
return releaseList;
}
public List<String> getDeveloperList() {
return developerList;
}
public String getRecommendedVersion() {
return recommendedVersion;
}
public String oldVersion() {
return currentVersion;
}
public String newVersion() {
if(recommendedVersion.equalsIgnoreCase("release")) {
return releaseList.get(0);
}else if(recommendedVersion.equalsIgnoreCase("developer")) {
return developerList.get(0);
}else {
return "UpToDate";
}
}
public String newVersionNotes() {
if (recommendedVersion.equalsIgnoreCase("release")) {
return releaseList.get(1);
} else if (recommendedVersion.equalsIgnoreCase("developer")) {
return developerList.get(1);
} else {
return "UpToDate";
}
}
public String getDownloadLink() {
if (recommendedVersion.equalsIgnoreCase("release")) {
return releaseList.get(2);//"https://www.spigotmc.org/resources/no-enderman-grief2.71236/history";
} else if (recommendedVersion.equalsIgnoreCase("developer")) {
return developerList.get(2);//"https://discord.com/channels/654087250665144321/654444482372173875";
} else {
return "UpToDate";
}
}
/**public boolean checkForUpdates2() {
if(currentVersion.contains(".D")){
versionType = "developer";
}else{
versionType = "release";
}
String[] versionArray = getLatestVersion(versionType);
if (versionArray == null) {
Bukkit.getLogger().warning(Ansi.RED + "Could not connect to update server.");
return false;
}
String latestVersion = versionArray[0];
String latestNotes = versionArray[1];
if (latestVersion.equals(currentVersion)) {
return false;
} else {
System.out.println("There is a new version of " + pluginName + " available!");
System.out.println("Your version: " + currentVersion);
System.out.println("Latest version: " + latestVersion);
System.out.println("Update notes: " + latestNotes);
System.out.println("Please update to the newest version.");
System.out.println("Download: https://www.spigotmc.org/resources/" + pluginName + ".75749/history");
System.out.println("Donate: <donation link>");
return true;
}
}//*/
/**private String[] getLatestVersion(String versionType) {
try {
URL url = new URL(githubURL);
InputStream stream = url.openStream();
Scanner scanner = new Scanner(stream);
scanner.useDelimiter("\\Z");
String xmlContent = scanner.next();
scanner.close();
stream.close();
String versionTag = "<" + versionType + ">";
String notesTag = "<" + versionType + "-notes>";
String endTag = "</" + versionType + ">";
int versionStartIndex = xmlContent.indexOf(versionTag);
int notesStartIndex = xmlContent.indexOf(notesTag);
int versionEndIndex = xmlContent.indexOf(endTag);
if (versionStartIndex == -1 || notesStartIndex == -1 || versionEndIndex == -1) {
return null;
}
String versionNumber = xmlContent.substring(versionStartIndex + versionTag.length(), versionEndIndex);
String notes = xmlContent.substring(notesStartIndex + notesTag.length(), xmlContent.indexOf(endTag + "-notes>"));
String[] versionArray = new String[2];
versionArray[0] = versionNumber;
versionArray[1] = notes;
return versionArray;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}//*/
/**public static void main(String[] args) {
//String pluginName = "MyPlugin";
String currentVersion = "1.14_1.0.4";
String githubURL = "https://github.com/JoelGodOfwar/NoEndermanGrief/raw/master/versions/1.14/versions.xml";
VersionChecker checker = new VersionChecker(currentVersion, 71236, githubURL);
checker.checkForUpdates();
}//*/
}