diff options
Diffstat (limited to 'src/main/java/me/shedaniel/rei/update/UpdateChecker.java')
| -rw-r--r-- | src/main/java/me/shedaniel/rei/update/UpdateChecker.java | 205 |
1 files changed, 0 insertions, 205 deletions
diff --git a/src/main/java/me/shedaniel/rei/update/UpdateChecker.java b/src/main/java/me/shedaniel/rei/update/UpdateChecker.java deleted file mode 100644 index effa75ab3..000000000 --- a/src/main/java/me/shedaniel/rei/update/UpdateChecker.java +++ /dev/null @@ -1,205 +0,0 @@ -package me.shedaniel.rei.update; - -import com.google.common.collect.Lists; -import com.google.gson.*; -import com.google.gson.annotations.SerializedName; -import me.shedaniel.rei.RoughlyEnoughItemsCore; -import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.loader.FabricLoader; -import net.fabricmc.loader.ModContainer; -import net.minecraft.SharedConstants; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.resource.language.I18n; -import net.minecraft.text.StringTextComponent; -import net.minecraft.world.World; -import org.apache.commons.io.IOUtils; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; -import java.util.stream.Collectors; - -public class UpdateChecker implements ClientModInitializer { - - private static final Gson GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create(); - private static Version currentVersion = null, latestForGame = null; - private static JsonVersionElement element; - private static World lastWorld = null; - private static String VERSION_STRING = "https://raw.githubusercontent.com/shedaniel/RoughlyEnoughItems/1.14/version.json"; - - public static boolean isOutdated() { - return latestForGame.compareTo(currentVersion) == 1 && currentVersion != null; - } - - public static UpdatePriority getUpdatePriority(List<Version> versions) { - UpdatePriority p = UpdatePriority.NONE; - List<UpdatePriority> priorities = Arrays.asList(UpdatePriority.values()); - for(UpdatePriority priority : versions.stream().map(UpdateChecker::getUpdatePriority).collect(Collectors.toList())) - if (priority.compareTo(p) > 0) - p = priority; - return p; - } - - public static UpdatePriority getUpdatePriority(Version version) { - JsonArray array = element.getChangelogs().getFabric(); - for(JsonElement element : array) { - JsonObject jsonObject = element.getAsJsonObject(); - if (jsonObject.has("version") && jsonObject.get("version").getAsString().equals(version.toString())) - return UpdatePriority.fromString(jsonObject.get("level").getAsString()); - } - return UpdatePriority.NONE; - } - - public static boolean checkUpdates() { - return RoughlyEnoughItemsCore.getConfigHelper().getConfig().checkUpdates; - } - - public static List<String> getChangelog(Version currentVersion) { - List<String> changelogs = Lists.newLinkedList(); - JsonArray array = element.getChangelogs().getFabric(); - array.forEach(jsonElement -> { - JsonObject jsonObject = jsonElement.getAsJsonObject(); - Version jsonVersion = new Version(jsonObject.get("version").getAsString()); - if (jsonVersion.compareTo(currentVersion) > 0 && jsonVersion.compareTo(latestForGame) <= 0) - changelogs.add(I18n.translate("text.rei.update_changelog_line", jsonObject.get("text").getAsString())); - }); - return changelogs; - } - - public static Version getCurrentVersion() { - return currentVersion; - } - - public static Version getLatestForGame() { - return latestForGame; - } - - public static void onTick(MinecraftClient client) { - if (client.world != lastWorld) { - lastWorld = client.world; - if (lastWorld != null) { - if (checkUpdates() && isOutdated()) { - String currentVersionString = getCurrentVersion() == null ? "null" : getCurrentVersion().toString(); - List<Version> versions = getVersionsHigherThan(currentVersion); - String t[] = I18n.translate("text.rei.update_outdated", currentVersionString, latestForGame, getUpdatePriority(versions).name().toUpperCase()).split("\n"); - for(String s : t) - client.player.addChatMessage(new StringTextComponent(s), false); - getChangelog(currentVersion).forEach(s -> client.player.addChatMessage(new StringTextComponent(s), false)); - } - } - } - } - - private static List<Version> getVersionsHigherThan(Version currentVersion) { - List<Version> versions = Lists.newLinkedList(); - JsonArray array = element.getChangelogs().getFabric(); - array.forEach(jsonElement -> { - Version jsonVersion = new Version(jsonElement.getAsJsonObject().get("version").getAsString()); - if (jsonVersion.compareTo(currentVersion) > 0) - versions.add(jsonVersion); - }); - return versions; - } - - @SuppressWarnings("deprecation") - @Override - public void onInitializeClient() { - if (!checkUpdates()) - return; - FabricLoader.INSTANCE.getMods().stream().map(ModContainer::getInfo).forEach(modInfo -> { - if (modInfo.getId().equals("roughlyenoughitems")) - try { - currentVersion = new Version(modInfo.getDescription().substring(53)); - } catch (Exception e) { - RoughlyEnoughItemsCore.LOGGER.warn("Can't load REI version, report if this is not in development environment!"); - } - }); - InputStream downloadedStream = downloadVersionString(); - String downloadedString = null; - try { - downloadedString = IOUtils.toString(downloadedStream, StandardCharsets.UTF_8); - element = GSON.fromJson(downloadedString, JsonVersionElement.class); - } catch (IOException e) { - e.printStackTrace(); - } - if (downloadedString != null && !downloadedString.equalsIgnoreCase("{}")) - latestForGame = new Version(parseLatest(element, SharedConstants.getGameVersion().getName())); - else - latestForGame = new Version("0.0.0"); - } - - @SuppressWarnings("deprecation") - private InputStream downloadVersionString() { - try { - URL versionUrl = new URL(VERSION_STRING); - return versionUrl.openStream(); - } catch (IOException e) { - return new java.io.StringBufferInputStream("{}"); - } - } - - private String parseLatest(JsonVersionElement element, String gameVersion) { - LinkedList<LatestVersionObject> objects = new LinkedList<>(element.getLatestVersions()); - for(int i = objects.size() - 1; i >= 0; i--) - if (objects.get(i).getGameVersion().equals(gameVersion)) - return objects.get(i).getModVersion(); - return objects.getLast().getModVersion(); - } - - private class JsonVersionElement { - @SerializedName("latest") - private List<LatestVersionObject> latestVersions; - private ChangelogObject changelogs; - - public JsonVersionElement() { - this.latestVersions = Lists.newArrayList(); - changelogs = new ChangelogObject(); - } - - public List<LatestVersionObject> getLatestVersions() { - return latestVersions; - } - - public ChangelogObject getChangelogs() { - return changelogs; - } - } - - private class LatestVersionObject { - @SerializedName("game") - private String gameVersion = ""; - @SerializedName("mod") - private String modVersion = ""; - - public String getGameVersion() { - return gameVersion; - } - - public String getModVersion() { - return modVersion; - } - - @Override - public String toString() { - return String.format("LatestVersion[%s] = %s", getGameVersion(), getModVersion()); - } - } - - private class ChangelogObject { - private JsonArray fabric = new JsonArray(); - private JsonArray rift = new JsonArray(); - - public JsonArray getFabric() { - return fabric; - } - - public JsonArray getRift() { - return rift; - } - } - -} |
