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.server.management.PlayerInstance;
010import net.minecraft.world.storage.SaveHandler;
011import net.minecraft.world.storage.WorldInfo;
012
013import com.google.common.eventbus.EventBus;
014import com.google.common.eventbus.Subscribe;
015
016import cpw.mods.fml.common.DummyModContainer;
017import cpw.mods.fml.common.LoadController;
018import cpw.mods.fml.common.Loader;
019import cpw.mods.fml.common.ModMetadata;
020import cpw.mods.fml.common.WorldAccessContainer;
021import cpw.mods.fml.common.event.FMLPostInitializationEvent;
022import cpw.mods.fml.common.event.FMLPreInitializationEvent;
023
024import static net.minecraftforge.common.ForgeVersion.*;
025
026public class ForgeDummyContainer extends DummyModContainer implements WorldAccessContainer
027{
028    public static int clumpingThreshold = 64;
029    public static boolean legacyFurnaceSides = false;
030
031    public ForgeDummyContainer()
032    {
033        super(new ModMetadata());
034        ModMetadata meta = getMetadata();
035        meta.modId       = "Forge";
036        meta.name        = "Minecraft Forge";
037        meta.version     = String.format("%d.%d.%d.%d", majorVersion, minorVersion, revisionVersion, buildVersion);
038        meta.credits     = "Made possible with help from many people";
039        meta.authorList  = Arrays.asList("LexManos", "Eloraam", "Spacetoad");
040        meta.description = "Minecraft Forge is a common open source API allowing a broad range of mods " +
041                           "to work cooperatively together. It allows many mods to be created without " +
042                           "them editing the main Minecraft code.";
043        meta.url         = "http://MinecraftForge.net";
044        meta.updateUrl   = "http://MinecraftForge.net/forum/index.php/topic,5.0.html";
045        meta.screenshots = new String[0];
046        meta.logoFile    = "/forge_logo.png";
047
048        Configuration config = null;
049        File cfgFile = new File(Loader.instance().getConfigDir(), "forge.cfg");
050        try
051        {
052            config = new Configuration(cfgFile);
053        }
054        catch (Exception e)
055        {
056            System.out.println("Error loading forge.cfg, deleting file and resetting: ");
057            e.printStackTrace();
058
059            if (cfgFile.exists())
060                cfgFile.delete();
061
062            config = new Configuration(cfgFile);
063        }
064        if (!config.isChild)
065        {
066            config.load();
067            Property enableGlobalCfg = config.get(Configuration.CATEGORY_GENERAL, "enableGlobalConfig", false);
068            if (enableGlobalCfg.getBoolean(false))
069            {
070                Configuration.enableGlobalConfig();
071            }
072        }
073        Property clumpingThresholdProperty = config.get(Configuration.CATEGORY_GENERAL, "clumpingThreshold", 64);
074        clumpingThresholdProperty.comment = "Controls the number threshold at which Packet51 is preferred over Packet52, default and minimum 64, maximum 1024";
075        clumpingThreshold = clumpingThresholdProperty.getInt(64);
076        if (clumpingThreshold > 1024 || clumpingThreshold < 64)
077        {
078            clumpingThreshold = 64;
079            clumpingThresholdProperty.set(64);
080        }
081        
082        Property furnaceOutput = config.get(Configuration.CATEGORY_GENERAL, "legacyFurnceOutput", false);
083        furnaceOutput.comment = "Controls the sides of vanilla furnaces for Forge's ISidedInventroy, Vanilla defines the output as the bottom, but mods/Forge define it as the sides. Settings this to true will restore the old side relations.";
084        legacyFurnaceSides = furnaceOutput.getBoolean(false);
085
086        if (config.hasChanged())
087        {
088            config.save();
089        }
090    }
091
092    @Override
093    public boolean registerBus(EventBus bus, LoadController controller)
094    {
095        bus.register(this);
096        return true;
097    }
098
099    @Subscribe
100    public void preInit(FMLPreInitializationEvent evt)
101    {
102        ForgeChunkManager.captureConfig(evt.getModConfigurationDirectory());
103    }
104
105    @Subscribe
106    public void postInit(FMLPostInitializationEvent evt)
107    {
108        ForgeChunkManager.loadConfiguration();
109    }
110
111    @Override
112    public NBTTagCompound getDataForWriting(SaveHandler handler, WorldInfo info)
113    {
114        NBTTagCompound forgeData = new NBTTagCompound();
115        NBTTagCompound dimData = DimensionManager.saveDimensionDataMap();
116        forgeData.setCompoundTag("DimensionData", dimData);
117        return forgeData;
118    }
119
120    @Override
121    public void readData(SaveHandler handler, WorldInfo info, Map<String, NBTBase> propertyMap, NBTTagCompound tag)
122    {
123        if (tag.hasKey("DimensionData"))
124        {
125            DimensionManager.loadDimensionDataMap(tag.hasKey("DimensionData") ? tag.getCompoundTag("DimensionData") : null);
126        }
127    }
128}