/* * SK's Minecraft Launcher * Copyright (C) 2010-2014 Albert Pham <http://www.sk89q.com> and contributors * Please see LICENSE.txt for license information. */ package com.skcraft.launcher.creator.util; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.skcraft.launcher.util.HttpRequest; import lombok.Data; import lombok.Getter; import javax.annotation.Nullable; import java.io.IOException; import java.net.URL; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Map; import static com.google.common.base.Preconditions.checkNotNull; public class NemModList { @Getter private Map<String, ModEntry> mods = ImmutableMap.of(); public void load(String version) throws IOException, InterruptedException { checkNotNull(version, "version"); List<ModEntry> mods = HttpRequest.get(HttpRequest.url("https://bot.notenoughmods.com/" + version + ".json")) .execute() .expectResponseCode(200) .returnContent() .asJson(new TypeReference<List<ModEntry>>() {}); Map<String, ModEntry> index = Maps.newHashMap(); for (ModEntry entry : mods) { index.put(entry.getModId(), entry); } this.mods = Collections.unmodifiableMap(index); } @Nullable public ModEntry get(String modId) { checkNotNull(modId, "modId"); return mods.get(modId); } @Data @JsonIgnoreProperties(ignoreUnknown = true) public static class ModEntry { @JsonProperty("modid") private String modId; private String name; private List<String> aliases; @JsonProperty("version") private String latestVersion; @JsonProperty("dev") private String latestDevVersion; @JsonProperty("prevversion") private String previousVersion; private List<String> dependencies; @JsonProperty("longurl") private URL url; private List<String> tags; private String comment; private String author; private String license; private URL repo; @JsonProperty("added_at") private Date addedAt; @JsonProperty("lastupdated") private Date lastUpdated; } }