Fix dependency checking: you can depend on specific versions of FML

This commit is contained in:
Christian 2012-09-07 19:08:28 -04:00
parent 75c0e65092
commit 67b9fbe363
4 changed files with 22 additions and 19 deletions

View File

@ -239,7 +239,7 @@ public class FMLCommonHandler
{
Builder brd = ImmutableList.<String>builder();
brd.add(Loader.instance().getMCVersionString());
brd.add(Loader.instance().getFMLVersionString());
brd.add("FML v"+Loader.instance().getFMLVersionString());
String forgeBranding = (String) callForgeMethod("getBrandingVersion");
if (!Strings.isNullOrEmpty(forgeBranding))
{

View File

@ -218,7 +218,7 @@ public class Loader
}
if (!versionMissingMods.isEmpty())
{
FMLLog.severe("The mod %s (%s) requires mod versions %s to be available", mod.getModId(), mod.getName(), missingMods);
FMLLog.severe("The mod %s (%s) requires mod versions %s to be available", mod.getModId(), mod.getName(), versionMissingMods);
throw new MissingModsException(versionMissingMods);
}
}
@ -545,7 +545,7 @@ public class Loader
*/
public String getFMLVersionString()
{
return String.format("FML v%s.%s.%s.%s", major, minor, rev, build);
return String.format("%s.%s.%s.%s", major, minor, rev, build);
}
/**

View File

@ -37,8 +37,6 @@ public class ModSorter
private ModContainer before = new DummyModContainer();
private ModContainer after = new DummyModContainer();
private List<ModContainer> immutableMods;
public ModSorter(List<ModContainer> modList, Map<String, ModContainer> nameLookup)
{
buildGraph(modList, nameLookup);
@ -47,7 +45,6 @@ public class ModSorter
private void buildGraph(List<ModContainer> modList, Map<String, ModContainer> nameLookup)
{
modGraph = new DirectedGraph<ModContainer>();
immutableMods = Lists.newArrayList();
modGraph.addNode(beforeAll);
modGraph.addNode(before);
modGraph.addNode(afterAll);
@ -58,20 +55,18 @@ public class ModSorter
for (ModContainer mod : modList)
{
if (!mod.isImmutable())
{
modGraph.addNode(mod);
}
else
{
immutableMods.add(mod);
}
modGraph.addNode(mod);
}
for (ModContainer mod : modList)
{
if (mod.isImmutable())
{
// Immutable mods are always before everything
modGraph.addEdge(beforeAll, mod);
modGraph.addEdge(mod, before);
continue;
}
boolean preDepAdded = false;
boolean postDepAdded = false;
@ -133,7 +128,6 @@ public class ModSorter
{
List<ModContainer> sortedList = TopologicalSort.topologicalSort(modGraph);
sortedList.removeAll(Arrays.asList(new ModContainer[] {beforeAll, before, after, afterAll}));
immutableMods.addAll(sortedList);
return immutableMods;
return sortedList;
}
}

View File

@ -1,7 +1,9 @@
package cpw.mods.mockmod;
import net.minecraft.src.ItemBlock;
import net.minecraft.src.NetHandler;
import net.minecraft.src.NetworkManager;
import net.minecraft.src.Packet131MapData;
import net.minecraft.src.Packet250CustomPayload;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.Block;
@ -14,22 +16,29 @@ import cpw.mods.fml.common.asm.SideOnly;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.IPacketHandler;
import cpw.mods.fml.common.network.ITinyPacketHandler;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.network.NetworkMod.SidedPacketHandler;
import cpw.mods.fml.common.network.Player;
import cpw.mods.fml.common.ModMetadata;
@Mod(modid="MockMod", name="Mock Mod",version="1.2.3", dependencies="after:mod_testMod", useMetadata=true)
@Mod(modid="MockMod", name="Mock Mod",version="1.2.3", dependencies="after:FML@(3.0.184.0,3.0.184.1]", useMetadata=true)
@NetworkMod(channels={"MockMod"},clientSideRequired=true,packetHandler=MockMod.PacketHandler.class,clientPacketHandlerSpec=
@SidedPacketHandler(packetHandler=TestClass.class,channels={"Fish"}))
@SidedPacketHandler(packetHandler=TestClass.class,channels={"Fish"}),tinyPacketHandler=MockMod.PacketHandler.class)
public class MockMod
{
public static class PacketHandler implements IPacketHandler
public static class PacketHandler implements IPacketHandler, ITinyPacketHandler
{
@Override
public void onPacketData(NetworkManager manager, Packet250CustomPayload packet, Player player)
{
}
@Override
public void handle(NetHandler handler, Packet131MapData mapData)
{
}
}
public class TestItem extends ItemBlock
{