001package net.minecraftforge.common;
002
003import java.io.File;
004import java.util.Arrays;
005import java.util.Map;
006
007import net.minecraft.nbt.NBTBase;
008import net.minecraft.nbt.NBTTagCompound;
009import net.minecraft.world.storage.SaveHandler;
010import net.minecraft.world.storage.WorldInfo;
011
012import com.google.common.eventbus.EventBus;
013import com.google.common.eventbus.Subscribe;
014
015import cpw.mods.fml.common.DummyModContainer;
016import cpw.mods.fml.common.LoadController;
017import cpw.mods.fml.common.Loader;
018import cpw.mods.fml.common.ModMetadata;
019import cpw.mods.fml.common.WorldAccessContainer;
020import cpw.mods.fml.common.event.FMLPostInitializationEvent;
021import cpw.mods.fml.common.event.FMLPreInitializationEvent;
022
023import static net.minecraftforge.common.ForgeVersion.*;
024
025public 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}