package openmods.config.game; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableTable; import com.google.common.collect.Maps; import com.google.common.collect.Table; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.ModContainer; import java.util.Map; import net.minecraftforge.common.config.Property; public class FeatureRegistry { public static final FeatureRegistry instance = new FeatureRegistry(); private static class Entry { public final AbstractFeatureManager manager; public final Table<String, String, Property> properties; public Entry(AbstractFeatureManager manager, Table<String, String, Property> properties) { this.manager = manager; this.properties = properties; } } private Map<String, Entry> features = Maps.newHashMap(); private void addValue(Entry entry) { ModContainer mod = Loader.instance().activeModContainer(); Preconditions.checkNotNull(mod, "Can't register outside initialization"); final String modId = mod.getModId(); final Entry prev = features.put(modId, entry); Preconditions.checkState(prev == null, "Duplicate on modid: " + modId); } public void register(AbstractFeatureManager manager) { addValue(new Entry(manager, ImmutableTable.<String, String, Property> of())); } public void register(AbstractFeatureManager manager, Table<String, String, Property> properties) { Preconditions.checkNotNull(properties); addValue(new Entry(manager, ImmutableTable.copyOf(properties))); } public AbstractFeatureManager getManager(String modId) { final Entry entry = features.get(modId); if (entry == null) return null; return entry.manager; } public boolean isEnabled(String modId, String category, String feature) { final Entry entry = features.get(modId); if (entry == null) return false; return entry.manager.isEnabled(category, feature); } public Property getProperty(String modId, String category, String feature) { final Entry entry = features.get(modId); if (entry == null) return null; return entry.properties.get(category, feature); } }