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}