    001/**
    002 * This software is provided under the terms of the Minecraft Forge Public
    003 * License v1.0.
    004 */
    005
    006package net.minecraftforge.common;
    007
    008import java.util.Arrays;
    009import java.util.HashSet;
    010import java.util.LinkedList;
    011import java.util.List;
    012import java.util.Set;
    013
    014import net.minecraft.stats.Achievement;
    015
    016public class AchievementPage
    017{
    018    private String name;
    019    private LinkedList<Achievement> achievements;
    020
    021    public AchievementPage(String name, Achievement... achievements)
    022    {
    023        this.name = name;
    024        this.achievements = new LinkedList<Achievement>(Arrays.asList(achievements));
    025    }
    026
    027    public String getName()
    028    {
    029        return name;
    030    }
    031
    032    public List<Achievement> getAchievements()
    033    {
    034        return achievements;
    035    }
    036
    037    private static LinkedList<AchievementPage> achievementPages = new LinkedList<AchievementPage>();
    038
    039    /**
    040     * Registers an achievement page.
    041     * @param page The page.
    042     */
    043    public static void registerAchievementPage(AchievementPage page)
    044    {
    045        if (getAchievementPage(page.getName()) != null)
    046        {
    047            throw new RuntimeException("Duplicate achievement page name \"" + page.getName() + "\"!");
    048        }
    049        achievementPages.add(page);
    050    }
    051
    052    /**
    053     * Will return an achievement page by its index on the list.
    054     * @param index The page's index.
    055     * @return the achievement page corresponding to the index or null if invalid index
    056     */
    057    public static AchievementPage getAchievementPage(int index)
    058    {
    059        return achievementPages.get(index);
    060    }
    061
    062    /**
    063     * Will return an achievement page by its name.
    064     * @param name The page's name.
    065     * @return the achievement page with the given name or null if no such page
    066     */
    067    public static AchievementPage getAchievementPage(String name)
    068    {
    069        for (AchievementPage page : achievementPages)
    070        {
    071            if (page.getName().equals(name))
    072            {
    073                return page;
    074            }
    075        }
    076        return null;
    077    }
    078
    079    /**
    080     * Will return the list of achievement pages.
    081     * @return the list's size
    082     */
    083    public static Set<AchievementPage> getAchievementPages()
    084    {
    085        return new HashSet<AchievementPage>(achievementPages);
    086    }
    087
    088    /**
    089     * Will return whether an achievement is in any page or not.
    090     * @param achievement The achievement.
    091     */
    092    public static boolean isAchievementInPages(Achievement achievement)
    093    {
    094        for (AchievementPage page : achievementPages)
    095        {
    096            if (page.getAchievements().contains(achievement))
    097            {
    098                return true;
    099            }
    100        }
    101        return false;
    102    }
    103
    104    public static String getTitle(int index)
    105    {
    106        return index == -1 ? "Minecraft" : getAchievementPage(index).getName();
    107    }
    108}