com.skcraft.launcher.creator.util.NemModList.java Source code

Java tutorial

Introduction

Here is the source code for com.skcraft.launcher.creator.util.NemModList.java

Source

/*
 * 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;

    }

}