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 }