Files
MinecraftForge/src/main/java/cpw/mods/fml/common/FMLContainer.java
T

139 lines
4.8 KiB
Java
Raw Normal View History

2012-07-22 11:56:38 -02:30
/*
2013-03-07 19:25:48 -05:00
* Forge Mod Loader
* Copyright (c) 2012-2013 cpw.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
2013-03-07 19:25:48 -05:00
* Contributors:
* cpw - implementation
2012-07-22 11:56:38 -02:30
*/
package cpw.mods.fml.common;
import java.io.File;
2012-12-23 22:27:02 -05:00
import java.security.cert.Certificate;
2012-07-22 11:56:38 -02:30
import java.util.Arrays;
import java.util.Map;
import java.util.logging.Level;
2012-07-22 11:56:38 -02:30
2012-12-09 22:00:51 -05:00
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.world.storage.SaveHandler;
import net.minecraft.world.storage.WorldInfo;
import com.google.common.eventbus.EventBus;
import cpw.mods.fml.client.FMLFileResourcePack;
import cpw.mods.fml.client.FMLFolderResourcePack;
import cpw.mods.fml.common.asm.FMLSanityChecker;
import cpw.mods.fml.common.network.NetworkRegistry;
2012-12-09 22:00:51 -05:00
import cpw.mods.fml.common.registry.GameData;
import cpw.mods.fml.relauncher.Side;
2012-07-22 11:56:38 -02:30
/**
* @author cpw
*
*/
public class FMLContainer extends DummyModContainer implements WorldAccessContainer
2012-07-22 11:56:38 -02:30
{
public FMLContainer()
2012-07-22 11:56:38 -02:30
{
super(new ModMetadata());
ModMetadata meta = getMetadata();
meta.modId="FML";
meta.name="Forge Mod Loader";
meta.version=Loader.instance().getFMLVersionString();
meta.credits="Made possible with help from many people";
meta.authorList=Arrays.asList("cpw, LexManos");
meta.description="The Forge Mod Loader provides the ability for systems to load mods " +
"from the file system. It also provides key capabilities for mods to be able " +
2013-11-10 13:15:26 -05:00
"to cooperate and provide a good modding environment. ";
meta.url="https://github.com/MinecraftForge/FML/wiki";
meta.updateUrl="https://github.com/MinecraftForge/FML/wiki";
2012-07-22 11:56:38 -02:30
meta.screenshots=new String[0];
meta.logoFile="";
}
@Override
public boolean registerBus(EventBus bus, LoadController controller)
{
return true;
}
@Override
public NBTTagCompound getDataForWriting(SaveHandler handler, WorldInfo info)
{
NBTTagCompound fmlData = new NBTTagCompound();
NBTTagList list = new NBTTagList();
for (ModContainer mc : Loader.instance().getActiveModList())
{
NBTTagCompound mod = new NBTTagCompound();
mod.func_74778_a("ModId", mc.getModId());
mod.func_74778_a("ModVersion", mc.getVersion());
list.func_74742_a(mod);
}
fmlData.func_74782_a("ModList", list);
NBTTagList itemList = new NBTTagList();
2012-12-09 22:00:51 -05:00
GameData.writeItemData(itemList);
fmlData.func_74782_a("ModItemData", itemList);
return fmlData;
}
@Override
public void readData(SaveHandler handler, WorldInfo info, Map<String, NBTBase> propertyMap, NBTTagCompound tag)
{
if (tag.func_74764_b("ModList"))
{
2013-12-02 23:46:42 -05:00
NBTTagList modList = tag.func_150295_c("ModList", (byte)10);
for (int i = 0; i < modList.func_74745_c(); i++)
{
2013-12-02 23:46:42 -05:00
NBTTagCompound mod = modList.func_150305_b(i);
String modId = mod.func_74779_i("ModId");
String modVersion = mod.func_74779_i("ModVersion");
ModContainer container = Loader.instance().getIndexedModList().get(modId);
if (container == null)
{
FMLLog.log("fml.ModTracker", Level.SEVERE, "This world was saved with mod %s which appears to be missing, things may not work well", modId);
continue;
}
if (!modVersion.equals(container.getVersion()))
{
FMLLog.log("fml.ModTracker", Level.INFO, "This world was saved with mod %s version %s and it is now at version %s, things may not work well", modId, modVersion, container.getVersion());
}
}
}
if (tag.func_74764_b("ModItemData"))
{
2013-12-02 23:46:42 -05:00
NBTTagList modList = tag.func_150295_c("ModItemData", (byte)10);
// Set<ItemData> worldSaveItems = GameData.buildWorldItemData(modList);
// GameData.validateWorldSave(worldSaveItems);
}
else
{
2012-12-09 22:00:51 -05:00
GameData.validateWorldSave(null);
}
}
2012-12-23 22:27:02 -05:00
@Override
public Certificate getSigningCertificate()
{
Certificate[] certificates = getClass().getProtectionDomain().getCodeSource().getCertificates();
return certificates != null ? certificates[0] : null;
}
@Override
public File getSource()
{
return FMLSanityChecker.fmlLocation;
}
@Override
public Class<?> getCustomResourcePackClass()
{
return getSource().isDirectory() ? FMLFolderResourcePack.class : FMLFileResourcePack.class;
}
2012-07-22 11:56:38 -02:30
}