001    package net.minecraftforge.common;
002    
003    import java.io.File;
004    import java.util.Arrays;
005    import java.util.Map;
006    
007    import net.minecraft.nbt.NBTBase;
008    import net.minecraft.nbt.NBTTagCompound;
009    import net.minecraft.world.storage.SaveHandler;
010    import net.minecraft.world.storage.WorldInfo;
011    
012    import com.google.common.eventbus.EventBus;
013    import com.google.common.eventbus.Subscribe;
014    
015    import cpw.mods.fml.common.DummyModContainer;
016    import cpw.mods.fml.common.LoadController;
017    import cpw.mods.fml.common.Loader;
018    import cpw.mods.fml.common.ModMetadata;
019    import cpw.mods.fml.common.WorldAccessContainer;
020    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
021    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
022    
023    import static net.minecraftforge.common.ForgeVersion.*;
024    
025    public class ForgeDummyContainer extends DummyModContainer implements WorldAccessContainer
026    {
027        public ForgeDummyContainer()
028        {
029            super(new ModMetadata());
030            ModMetadata meta = getMetadata();
031            meta.modId       = "Forge";
032            meta.name        = "Minecraft Forge";
033            meta.version     = String.format("%d.%d.%d.%d", majorVersion, minorVersion, revisionVersion, buildVersion);
034            meta.credits     = "Made possible with help from many people";
035            meta.authorList  = Arrays.asList("LexManos", "Eloraam", "Spacetoad");
036            meta.description = "Minecraft Forge is a common open source API allowing a broad range of mods " +
037                               "to work cooperatively together. It allows many mods to be created without " +
038                               "them editing the main Minecraft code.";
039            meta.url         = "http://MinecraftForge.net";
040            meta.updateUrl   = "http://MinecraftForge.net/forum/index.php/topic,5.0.html";
041            meta.screenshots = new String[0];
042            meta.logoFile    = "/forge_logo.png";
043            
044            Configuration config = new Configuration(new File(Loader.instance().getConfigDir(), "forge.cfg"));
045            if (!config.isChild)
046            {
047                config.load();
048                Property enableGlobalCfg = config.get(Configuration.CATEGORY_GENERAL, "enableGlobalConfig", false);
049                if (enableGlobalCfg.getBoolean(false))
050                {
051                    Configuration.enableGlobalConfig();
052                }
053                config.save();
054            }
055        }
056    
057        @Override
058        public boolean registerBus(EventBus bus, LoadController controller)
059        {
060            bus.register(this);
061            return true;
062        }
063    
064        @Subscribe
065        public void preInit(FMLPreInitializationEvent evt)
066        {
067            ForgeChunkManager.captureConfig(evt.getModConfigurationDirectory());
068        }
069    
070        @Subscribe
071        public void postInit(FMLPostInitializationEvent evt)
072        {
073            ForgeChunkManager.loadConfiguration();
074        }
075    
076        @Override
077        public NBTTagCompound getDataForWriting(SaveHandler handler, WorldInfo info)
078        {
079            NBTTagCompound forgeData = new NBTTagCompound();
080            NBTTagCompound dimData = DimensionManager.saveDimensionDataMap();
081            forgeData.setCompoundTag("DimensionData", dimData);
082            return forgeData;
083        }
084    
085        @Override
086        public void readData(SaveHandler handler, WorldInfo info, Map<String, NBTBase> propertyMap, NBTTagCompound tag)
087        {
088            if (tag.hasKey("DimensionData"))
089            {
090                DimensionManager.loadDimensionDataMap(tag.hasKey("DimensionData") ? tag.getCompoundTag("DimensionData") : null);
091            }
092        }
093    }