package openmods.config.game; import com.google.common.collect.Sets; import com.google.common.collect.Table; import cpw.mods.fml.common.event.FMLMissingMappingsEvent; import java.io.File; import java.util.Set; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.config.Property; import openmods.config.BlockInstances; import openmods.config.ConfigStorage; import openmods.config.ItemInstances; public class ModStartupHelper { private final Set<Class<? extends BlockInstances>> blockHolders = Sets.newHashSet(); private final Set<Class<? extends ItemInstances>> itemHolders = Sets.newHashSet(); private final GameConfigProvider gameConfig; public ModStartupHelper(String modId) { this.gameConfig = new GameConfigProvider(modId); } public void registerBlocksHolder(Class<? extends BlockInstances> holder) { blockHolders.add(holder); } public void registerItemsHolder(Class<? extends ItemInstances> holder) { itemHolders.add(holder); } public void preInit(File configFile) { preInit(new Configuration(configFile)); } public void preInit(Configuration config) { ConfigurableFeatureManager features = new ConfigurableFeatureManager(); for (Class<? extends BlockInstances> blockHolder : blockHolders) features.collectFromBlocks(blockHolder); for (Class<? extends ItemInstances> itemHolder : itemHolders) features.collectFromItems(itemHolder); registerCustomFeatures(features); populateConfig(config); final Table<String, String, Property> properties = features.loadFromConfiguration(config); FeatureRegistry.instance.register(features, properties); if (config.hasChanged()) config.save(); ConfigStorage.instance.register(config); gameConfig.setFeatures(features); setupIds(gameConfig); setupBlockFactory(gameConfig.getBlockFactory()); setupItemFactory(gameConfig.getItemFactory()); for (Class<? extends BlockInstances> blockHolder : blockHolders) gameConfig.registerBlocks(blockHolder); for (Class<? extends ItemInstances> itemHolder : itemHolders) gameConfig.registerItems(itemHolder); setupProvider(gameConfig); } public void handleRenames(FMLMissingMappingsEvent event) { gameConfig.handleRemaps(event.get()); } protected void setupItemFactory(FactoryRegistry<Item> itemFactory) {} protected void setupBlockFactory(FactoryRegistry<Block> blockFactory) {} protected void populateConfig(Configuration config) {} protected void registerCustomFeatures(ConfigurableFeatureManager features) {} protected void setupIds(GameConfigProvider gameConfig) {} protected void setupProvider(GameConfigProvider gameConfig) {} }