    001    /**
    002     * This software is provided under the terms of the Minecraft Forge Public
    003     * License v1.0.
    004     */
    005
    006    package net.minecraftforge.common;
    007
    008    import java.util.Arrays;
    009    import java.util.HashSet;
    010    import java.util.LinkedList;
    011    import java.util.List;
    012    import java.util.Set;
    013
    014    import net.minecraft.stats.Achievement;
    015
    016    public 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    }