diff --git a/fml/LICENSE-fml.txt b/fml/LICENSE-fml.txt
index b1345ced9..953d42555 100644
--- a/fml/LICENSE-fml.txt
+++ b/fml/LICENSE-fml.txt
@@ -1,7 +1,7 @@
-This minecraft mod, Forge Mod Loader, including all parts herein, is licensed
-under the GNU LGPL v2.1 or later.
+This minecraft mod, Forge Mod Loader, including all parts herein except as noted below,
+is licensed under the GNU LGPL v2.1 or later.
-Homepage: https://github.com/cpw/FML
+Homepage: https://github.com/MinecraftForge/FML
This software includes portions from the Apache Maven project at
http://maven.apache.org/ specifically the ComparableVersion.java code. It is
@@ -9,6 +9,12 @@ included based on guidelines at
http://www.softwarefreedom.org/resources/2007/gpl-non-gpl-collaboration.html
with notices intact. The only change is a non-functional change of package name.
+=== MCP Data ===
+This software includes data from the Minecraft Coder Pack (MCP), with kind permission
+from them. The license to MCP data is not transitive - distribution of this data by
+third parties requires independent licensing from the MCP team. This data is not
+redistributable without permission from the MCP team.
+
========
GNU LESSER GENERAL PUBLIC LICENSE
diff --git a/fml/common/cpw/mods/fml/common/BukkitProxy.java b/fml/common/cpw/mods/fml/common/BukkitProxy.java
index d0dcfb382..19257da52 100644
--- a/fml/common/cpw/mods/fml/common/BukkitProxy.java
+++ b/fml/common/cpw/mods/fml/common/BukkitProxy.java
@@ -2,7 +2,7 @@ package cpw.mods.fml.common;
/**
* A marker interface for retrieving a proxy to a bukkit plugin.
- * Fields associated with {@link BukkitPluginRef} annotations should be should probably
+ * Fields associated with {@link BukkitPluginRef} annotations should
* declare this type and cast down if the target is available (not null)
* @author cpw
*
diff --git a/fml/common/cpw/mods/fml/common/FMLCommonHandler.java b/fml/common/cpw/mods/fml/common/FMLCommonHandler.java
index b4627773a..2fc57b7a5 100644
--- a/fml/common/cpw/mods/fml/common/FMLCommonHandler.java
+++ b/fml/common/cpw/mods/fml/common/FMLCommonHandler.java
@@ -304,9 +304,14 @@ public class FMLCommonHandler
}
}
- public void handleServerStarting(MinecraftServer server)
+ public boolean handleServerAboutToStart(MinecraftServer server)
{
- Loader.instance().serverStarting(server);
+ return Loader.instance().serverAboutToStart(server);
+ }
+
+ public boolean handleServerStarting(MinecraftServer server)
+ {
+ return Loader.instance().serverStarting(server);
}
public void handleServerStarted()
diff --git a/fml/common/cpw/mods/fml/common/FMLDummyContainer.java b/fml/common/cpw/mods/fml/common/FMLDummyContainer.java
index a0f56a99b..37edd2ce6 100644
--- a/fml/common/cpw/mods/fml/common/FMLDummyContainer.java
+++ b/fml/common/cpw/mods/fml/common/FMLDummyContainer.java
@@ -51,8 +51,8 @@ public class FMLDummyContainer extends DummyModContainer implements WorldAccessC
"to cooperate and provide a good modding environment. " +
"The mod loading system is compatible with ModLoader, all your ModLoader " +
"mods should work.";
- meta.url="https://github.com/cpw/FML/wiki";
- meta.updateUrl="https://github.com/cpw/FML/wiki";
+ meta.url="https://github.com/MinecraftForge/FML/wiki";
+ meta.updateUrl="https://github.com/MinecraftForge/FML/wiki";
meta.screenshots=new String[0];
meta.logoFile="";
}
diff --git a/fml/common/cpw/mods/fml/common/FMLModContainer.java b/fml/common/cpw/mods/fml/common/FMLModContainer.java
index 7ab6449bb..252aea20c 100644
--- a/fml/common/cpw/mods/fml/common/FMLModContainer.java
+++ b/fml/common/cpw/mods/fml/common/FMLModContainer.java
@@ -58,6 +58,7 @@ import cpw.mods.fml.common.event.FMLInterModComms.IMCEvent;
import cpw.mods.fml.common.event.FMLFingerprintViolationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
+import cpw.mods.fml.common.event.FMLServerAboutToStartEvent;
import cpw.mods.fml.common.event.FMLServerStartedEvent;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.common.event.FMLServerStoppedEvent;
@@ -90,6 +91,7 @@ public class FMLModContainer implements ModContainer
.put(FMLPreInitializationEvent.class, Mod.PreInit.class)
.put(FMLInitializationEvent.class, Mod.Init.class)
.put(FMLPostInitializationEvent.class, Mod.PostInit.class)
+ .put(FMLServerAboutToStartEvent.class, Mod.ServerAboutToStart.class)
.put(FMLServerStartingEvent.class, Mod.ServerStarting.class)
.put(FMLServerStartedEvent.class, Mod.ServerStarted.class)
.put(FMLServerStoppingEvent.class, Mod.ServerStopping.class)
diff --git a/fml/common/cpw/mods/fml/common/Loader.java b/fml/common/cpw/mods/fml/common/Loader.java
index a8a5b670d..e212775a0 100644
--- a/fml/common/cpw/mods/fml/common/Loader.java
+++ b/fml/common/cpw/mods/fml/common/Loader.java
@@ -377,7 +377,7 @@ public class Loader
}
/**
- * @return
+ *
*/
private void initializeLoader()
{
@@ -695,10 +695,19 @@ public class Loader
return "Minecraft " + mccversion;
}
- public void serverStarting(Object server)
+ public boolean serverStarting(Object server)
{
- modController.distributeStateMessage(LoaderState.SERVER_STARTING, server);
- modController.transition(LoaderState.SERVER_STARTING);
+ try
+ {
+ modController.distributeStateMessage(LoaderState.SERVER_STARTING, server);
+ modController.transition(LoaderState.SERVER_STARTING);
+ }
+ catch (Throwable t)
+ {
+ FMLLog.log(Level.SEVERE, t, "A fatal exception occurred during the server starting event");
+ return false;
+ }
+ return true;
}
public void serverStarted()
@@ -752,4 +761,19 @@ public class Loader
modController.transition(LoaderState.SERVER_STOPPED);
modController.transition(LoaderState.AVAILABLE);
}
+
+ public boolean serverAboutToStart(MinecraftServer server)
+ {
+ try
+ {
+ modController.distributeStateMessage(LoaderState.SERVER_ABOUT_TO_START, server);
+ modController.transition(LoaderState.SERVER_ABOUT_TO_START);
+ }
+ catch (Throwable t)
+ {
+ FMLLog.log(Level.SEVERE, t, "A fatal exception occurred during the server about to start event");
+ return false;
+ }
+ return true;
+ }
}
diff --git a/fml/common/cpw/mods/fml/common/LoaderState.java b/fml/common/cpw/mods/fml/common/LoaderState.java
index 0bd780301..4bdb1223f 100644
--- a/fml/common/cpw/mods/fml/common/LoaderState.java
+++ b/fml/common/cpw/mods/fml/common/LoaderState.java
@@ -8,6 +8,7 @@ import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLLoadCompleteEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
+import cpw.mods.fml.common.event.FMLServerAboutToStartEvent;
import cpw.mods.fml.common.event.FMLServerStartedEvent;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.common.event.FMLServerStoppedEvent;
@@ -28,6 +29,7 @@ public enum LoaderState
INITIALIZATION("Initializing mods", FMLInitializationEvent.class),
POSTINITIALIZATION("Post-initializing mods", FMLPostInitializationEvent.class),
AVAILABLE("Mod loading complete", FMLLoadCompleteEvent.class),
+ SERVER_ABOUT_TO_START("Server about to start", FMLServerAboutToStartEvent.class),
SERVER_STARTING("Server starting", FMLServerStartingEvent.class),
SERVER_STARTED("Server started", FMLServerStartedEvent.class),
SERVER_STOPPING("Server stopping", FMLServerStoppingEvent.class),
diff --git a/fml/common/cpw/mods/fml/common/Mod.java b/fml/common/cpw/mods/fml/common/Mod.java
index 5aa5cd4f2..51d753723 100644
--- a/fml/common/cpw/mods/fml/common/Mod.java
+++ b/fml/common/cpw/mods/fml/common/Mod.java
@@ -144,6 +144,14 @@ public @interface Mod
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface PostInit {}
+ /**
+ * Mark the designated method as being called at the "server-about-to-start" phase
+ * @author cpw
+ *
+ */
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.METHOD)
+ public @interface ServerAboutToStart {}
/**
* Mark the designated method as being called at the "server-starting" phase
* @author cpw
diff --git a/fml/common/cpw/mods/fml/common/ModContainer.java b/fml/common/cpw/mods/fml/common/ModContainer.java
index 26b418170..21c60942f 100644
--- a/fml/common/cpw/mods/fml/common/ModContainer.java
+++ b/fml/common/cpw/mods/fml/common/ModContainer.java
@@ -81,13 +81,13 @@ public interface ModContainer
/**
* A list of modids that should be loaded prior to this one. The special
- * value * indicates to load before any other mod.
+ * value * indicates to load after any other mod.
*/
List getDependencies();
/**
* A list of modids that should be loaded after this one. The
- * special value * indicates to load after any
+ * special value * indicates to load before any
* other mod.
*/
List getDependants();
diff --git a/fml/common/cpw/mods/fml/common/event/FMLServerAboutToStartEvent.java b/fml/common/cpw/mods/fml/common/event/FMLServerAboutToStartEvent.java
new file mode 100644
index 000000000..14574c10f
--- /dev/null
+++ b/fml/common/cpw/mods/fml/common/event/FMLServerAboutToStartEvent.java
@@ -0,0 +1,25 @@
+package cpw.mods.fml.common.event;
+
+import net.minecraft.server.MinecraftServer;
+import cpw.mods.fml.common.LoaderState.ModState;
+
+public class FMLServerAboutToStartEvent extends FMLStateEvent {
+
+ private MinecraftServer server;
+
+ public FMLServerAboutToStartEvent(Object... data)
+ {
+ super(data);
+ this.server = (MinecraftServer) data[0];
+ }
+ @Override
+ public ModState getModState()
+ {
+ return ModState.AVAILABLE;
+ }
+
+ public MinecraftServer getServer()
+ {
+ return server;
+ }
+}
diff --git a/fml/common/cpw/mods/fml/common/network/NetworkMod.java b/fml/common/cpw/mods/fml/common/network/NetworkMod.java
index 3f3bc24d0..44f593654 100644
--- a/fml/common/cpw/mods/fml/common/network/NetworkMod.java
+++ b/fml/common/cpw/mods/fml/common/network/NetworkMod.java
@@ -35,7 +35,7 @@ public @interface NetworkMod
Class extends IPacketHandler> packetHandler() default NULL.class;
/**
- * A tiny packet handler implementation based on {@link Packet131MapData} for "small"
+ * A tiny packet handler implementation based on {@link net.minecraft.network.packet.Packet131MapData} for "small"
* data packet loads.
*/
Class extends ITinyPacketHandler> tinyPacketHandler() default NULL.class;
diff --git a/fml/common/cpw/mods/fml/common/network/NetworkModHandler.java b/fml/common/cpw/mods/fml/common/network/NetworkModHandler.java
index a3a52b3e1..34d9ed071 100644
--- a/fml/common/cpw/mods/fml/common/network/NetworkModHandler.java
+++ b/fml/common/cpw/mods/fml/common/network/NetworkModHandler.java
@@ -193,7 +193,7 @@ public class NetworkModHandler
}
}
/**
- * @return
+ * @return the default {@link NetworkMod#connectionHandler()} annotation value
*/
private Object getConnectionHandlerDefaultValue()
{
@@ -211,7 +211,7 @@ public class NetworkModHandler
}
/**
- * @return
+ * @return the default {@link NetworkMod#packetHandler()} annotation value
*/
private Object getPacketHandlerDefaultValue()
{
@@ -228,6 +228,9 @@ public class NetworkModHandler
}
}
+ /**
+ * @return the default {@link NetworkMod#tinyPacketHandler()} annotation value
+ */
private Object getTinyPacketHandlerDefaultValue()
{
try {
@@ -243,7 +246,7 @@ public class NetworkModHandler
}
}
/**
- * @return
+ * @return the {@link NetworkMod#clientPacketHandlerSpec()} default annotation value
*/
private Object getClientHandlerSpecDefaultValue()
{
@@ -260,7 +263,7 @@ public class NetworkModHandler
}
}
/**
- * @return
+ * @return the default {@link NetworkMod#serverPacketHandlerSpec()} annotation value
*/
private Object getServerHandlerSpecDefaultValue()
{
diff --git a/fml/common/cpw/mods/fml/common/network/NetworkRegistry.java b/fml/common/cpw/mods/fml/common/network/NetworkRegistry.java
index 415f301bd..60acbe4be 100644
--- a/fml/common/cpw/mods/fml/common/network/NetworkRegistry.java
+++ b/fml/common/cpw/mods/fml/common/network/NetworkRegistry.java
@@ -64,7 +64,7 @@ public class NetworkRegistry
}
/**
* Get the packet 250 channel registration string
- * @return
+ * @return the {@link Packet250CustomPayload} channel registration string
*/
byte[] getPacketRegistry(Side side)
{
@@ -81,8 +81,8 @@ public class NetworkRegistry
}
/**
* register a channel to a mod
- * @param container
- * @param channelName
+ * @param handler the packet handler
+ * @param channelName the channel name to register it with
*/
public void registerChannel(IPacketHandler handler, String channelName)
{
diff --git a/fml/common/cpw/mods/fml/common/registry/GameRegistry.java b/fml/common/cpw/mods/fml/common/registry/GameRegistry.java
index d24263d41..a2b66c188 100644
--- a/fml/common/cpw/mods/fml/common/registry/GameRegistry.java
+++ b/fml/common/cpw/mods/fml/common/registry/GameRegistry.java
@@ -45,6 +45,7 @@ import cpw.mods.fml.common.IWorldGenerator;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.LoaderException;
import cpw.mods.fml.common.LoaderState;
+import cpw.mods.fml.common.ObfuscationReflectionHelper;
import cpw.mods.fml.common.Mod.Block;
import cpw.mods.fml.common.ModContainer;
@@ -145,7 +146,7 @@ public class GameRegistry
/**
* Private and not yet working properly
*
- * @return
+ * @return a block id
*/
private static int findSpareBlockId()
{
@@ -250,7 +251,12 @@ public class GameRegistry
public static void addRecipe(ItemStack output, Object... params)
{
- CraftingManager.func_77594_a().func_92103_a(output, params);
+ addShapedRecipe(output, params);
+ }
+
+ public static IRecipe addShapedRecipe(ItemStack output, Object... params)
+ {
+ return CraftingManager.func_77594_a().func_92103_a(output, params);
}
public static void addShapelessRecipe(ItemStack output, Object... params)
@@ -273,6 +279,27 @@ public class GameRegistry
TileEntity.func_70306_a(tileEntityClass, id);
}
+ /**
+ * Register a tile entity, with alternative TileEntity identifiers. Use with caution!
+ * This method allows for you to "rename" the 'id' of the tile entity.
+ *
+ * @param tileEntityClass The tileEntity class to register
+ * @param id The primary ID, this will be the ID that the tileentity saves as
+ * @param alternatives A list of alternative IDs that will also map to this class. These will never save, but they will load
+ */
+ public static void registerTileEntityWithAlternatives(Class extends TileEntity> tileEntityClass, String id, String... alternatives)
+ {
+ TileEntity.func_70306_a(tileEntityClass, id);
+ Map teMappings = ObfuscationReflectionHelper.getPrivateValue(TileEntity.class, null, "field_70326_a", "a");
+ for (String s: alternatives)
+ {
+ if (!teMappings.containsKey(s))
+ {
+ teMappings.put(s, tileEntityClass);
+ }
+ }
+ }
+
public static void addBiome(BiomeGenBase biome)
{
WorldType.field_77137_b.addNewBiome(biome);
diff --git a/fml/common/cpw/mods/fml/common/registry/TickRegistry.java b/fml/common/cpw/mods/fml/common/registry/TickRegistry.java
index 76714fe4f..b16f85684 100644
--- a/fml/common/cpw/mods/fml/common/registry/TickRegistry.java
+++ b/fml/common/cpw/mods/fml/common/registry/TickRegistry.java
@@ -58,8 +58,8 @@ public class TickRegistry
}
/**
- * @param side
- * @return
+ * @param side the side to get the tick queue for
+ * @return the queue for the effective side
*/
private static PriorityQueue getQueue(Side side)
{
diff --git a/fml/common/cpw/mods/fml/common/registry/VillagerRegistry.java b/fml/common/cpw/mods/fml/common/registry/VillagerRegistry.java
index e5068ab2d..bcac65e90 100644
--- a/fml/common/cpw/mods/fml/common/registry/VillagerRegistry.java
+++ b/fml/common/cpw/mods/fml/common/registry/VillagerRegistry.java
@@ -37,7 +37,7 @@ public class VillagerRegistry
private List newVillagerIds = Lists.newArrayList();
/**
- * Allow access to the {@link StructureVillagePieces} array controlling new village
+ * Allow access to the {@link net.minecraft.world.gen.structure.StructureVillagePieces} array controlling new village
* creation so you can insert your own new village pieces
*
* @author cpw
@@ -46,7 +46,7 @@ public class VillagerRegistry
public interface IVillageCreationHandler
{
/**
- * Called when {@link MapGenVillage} is creating a new village
+ * Called when {@link net.minecraft.world.gen.structure.MapGenVillage} is creating a new village
*
* @param random
* @param i
@@ -60,7 +60,7 @@ public class VillagerRegistry
/**
- * Build an instance of the village component {@link StructureVillagePieces}
+ * Build an instance of the village component {@link net.minecraft.world.gen.structure.StructureVillagePieces}
* @param villagePiece
* @param startPiece
* @param pieces
@@ -150,10 +150,10 @@ public class VillagerRegistry
}
return defaultSkin;
}
-
+
/**
* Returns a list of all added villager types
- *
+ *
* @return newVillagerIds
*/
public static Collection getRegisteredVillagers()
diff --git a/fml/common/cpw/mods/fml/relauncher/FMLLogFormatter.java b/fml/common/cpw/mods/fml/relauncher/FMLLogFormatter.java
index 7f81db1b1..7768e738e 100644
--- a/fml/common/cpw/mods/fml/relauncher/FMLLogFormatter.java
+++ b/fml/common/cpw/mods/fml/relauncher/FMLLogFormatter.java
@@ -22,33 +22,19 @@ final class FMLLogFormatter extends Formatter
msg.append(this.dateFormat.format(Long.valueOf(record.getMillis())));
Level lvl = record.getLevel();
- if (lvl == Level.FINEST)
+ String name = lvl.getLocalizedName();
+ if ( name == null )
{
- msg.append(" [FINEST] ");
+ name = lvl.getName();
}
- else if (lvl == Level.FINER)
+
+ if ( ( name != null ) && ( name.length() > 0 ) )
{
- msg.append(" [FINER] ");
+ msg.append(" [" + name + "] ");
}
- else if (lvl == Level.FINE)
+ else
{
- msg.append(" [FINE] ");
- }
- else if (lvl == Level.INFO)
- {
- msg.append(" [INFO] ");
- }
- else if (lvl == Level.WARNING)
- {
- msg.append(" [WARNING] ");
- }
- else if (lvl == Level.SEVERE)
- {
- msg.append(" [SEVERE] ");
- }
- else if (lvl == Level.SEVERE)
- {
- msg.append(" [" + lvl.getLocalizedName() + "] ");
+ msg.append(" ");
}
if (record.getLoggerName() != null)
diff --git a/fml/common/cpw/mods/fml/relauncher/FMLRelauncher.java b/fml/common/cpw/mods/fml/relauncher/FMLRelauncher.java
index 21592977f..0fbfae94c 100644
--- a/fml/common/cpw/mods/fml/relauncher/FMLRelauncher.java
+++ b/fml/common/cpw/mods/fml/relauncher/FMLRelauncher.java
@@ -177,7 +177,7 @@ public class FMLRelauncher
}
/**
- * @return
+ * @return the location of the client home
*/
private File computeExistingClientHome()
{
diff --git a/fml/common/cpw/mods/fml/relauncher/RelaunchLibraryManager.java b/fml/common/cpw/mods/fml/relauncher/RelaunchLibraryManager.java
index 4d83ca6c0..a5f7d32aa 100644
--- a/fml/common/cpw/mods/fml/relauncher/RelaunchLibraryManager.java
+++ b/fml/common/cpw/mods/fml/relauncher/RelaunchLibraryManager.java
@@ -401,8 +401,8 @@ public class RelaunchLibraryManager
}
/**
- * @param mcDir
- * @return
+ * @param mcDir the minecraft home directory
+ * @return the lib directory
*/
private static File setupLibDir(File mcDir)
{
@@ -427,8 +427,8 @@ public class RelaunchLibraryManager
}
/**
- * @param mcDir
- * @return
+ * @param mcDir the minecraft home directory
+ * @return the coremod directory
*/
private static File setupCoreModDir(File mcDir)
{
diff --git a/fml/common/cpw/mods/fml/server/FMLServerHandler.java b/fml/common/cpw/mods/fml/server/FMLServerHandler.java
index be36fd702..91e29739f 100644
--- a/fml/common/cpw/mods/fml/server/FMLServerHandler.java
+++ b/fml/common/cpw/mods/fml/server/FMLServerHandler.java
@@ -42,7 +42,7 @@ import cpw.mods.fml.relauncher.Side;
* Handles primary communication from hooked code into the system
*
* The FML entry point is {@link #beginServerLoading(MinecraftServer)} called from
- * {@link net.minecraft.shared.DedicatedServer}
+ * {@link net.minecraft.server.dedicated.DedicatedServer}
*
* Obfuscated code should focus on this class and other members of the "server"
* (or "client") code
diff --git a/fml/common/mcpmod.info b/fml/common/mcpmod.info
index cfc73a34f..f6a99e42a 100644
--- a/fml/common/mcpmod.info
+++ b/fml/common/mcpmod.info
@@ -3,8 +3,8 @@
"modid": "mcp",
"name": "Minecraft Coder Pack",
"description": "Modding toolkit to decompile and deobfuscate the Minecraft client and server files.",
- "version": "7.26",
- "mcversion": "1.4.7",
+ "version": "7.30c",
+ "mcversion": "13w02b",
"logoFile": "/mcp.png",
"url": "http://mcp.ocean-labs.de/",
"updateUrl": "",
diff --git a/fml/install/CREDITS-fml.txt b/fml/install/CREDITS-fml.txt
index d2c019dd7..929849528 100644
--- a/fml/install/CREDITS-fml.txt
+++ b/fml/install/CREDITS-fml.txt
@@ -1,6 +1,6 @@
This is Forge Mod Loader.
-You can find the source code at all times at https://github.com/cpw/FML
+You can find the source code at all times at https://github.com/MinecraftForge/FML
This minecraft mod is a clean open source implementation of a mod loader for
minecraft servers, minecraft bukkit servers, and minecraft clients.
@@ -11,8 +11,14 @@ It implements API defined by the client side ModLoader, authored by Risugami.
http://www.minecraftforum.net/topic/75440-
It also contains suggestions and hints from LexManos, author of MinecraftForge.
-http://www.mod-buildcraft.com/forums/forum/minecraft-forge/
+http://www.minecraftforge.net/
-Finally, it contains an implementation of topological sort based on that
+Additionally, it contains an implementation of topological sort based on that
published at http://keithschwarz.com/interesting/code/?dir=topological-sort
+It also contains code from the Maven project for performing versioned dependency
+resolution. http://maven.apache.org/
+
+Forge Mod Loader downloads components from the Minecraft Coder Pack
+(http://mcp.ocean-labs.de/index.php/Main_Page) with kind permission from the MCP team.
+
diff --git a/fml/install/README.txt b/fml/install/README.txt
index 034a0390c..34efdc1ea 100755
--- a/fml/install/README.txt
+++ b/fml/install/README.txt
@@ -1,6 +1,6 @@
This is Forge Mod Loader, or FML for short, by cpw.
-More information can be found at https://github.com/cpw/FML/wiki
+More information can be found at https://github.com/MinecraftForge/FML/wiki
It is a clean reimplementation of a mod loading system for client, server and
bukkit use, incorporating API implementations of client side ModLoader by
diff --git a/fml/mc_versions.cfg b/fml/mc_versions.cfg
index 45c1cdfa0..f52f1f6a0 100644
--- a/fml/mc_versions.cfg
+++ b/fml/mc_versions.cfg
@@ -36,9 +36,9 @@ client_url = http://assets.minecraft.net/1_4_7/minecraft.jar
server_url = http://assets.minecraft.net/1_4_7/minecraft_server.jar
client_md5 = 8e80fb01b321c6b3c7efca397a3eea35
server_md5 = f69ac4bfce2dfbce03fe872518f75a05
-mcp_ver = 7.26
-mcp_url = http://mcp.ocean-labs.de/files/archive/mcp726.zip
-mcp_md5 = 5320353829c2906bd032649085721d1d
+mcp_ver = 7.26a
+mcp_url = http://mcp.ocean-labs.de/files/archive/mcp726a.zip
+mcp_md5 = 5f11fbccd857b43a0f54117253b3e4dd
[s13w02b]
client_url = http://assets.minecraft.net/13w02b/minecraft.jar
diff --git a/fml/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch b/fml/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch
index 7e55908a8..e8b009a12 100644
--- a/fml/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch
+++ b/fml/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch
@@ -25,12 +25,20 @@
this.func_71210_a(new DedicatedPlayerList(this));
long j = System.nanoTime();
-@@ -187,6 +192,8 @@
+@@ -167,6 +172,7 @@
+ this.func_71191_d((this.func_71207_Z() + 8) / 16 * 16);
+ this.func_71191_d(MathHelper.func_76125_a(this.func_71207_Z(), 64, 256));
+ this.field_71340_o.func_73667_a("max-build-height", Integer.valueOf(this.func_71207_Z()));
++ if (!FMLCommonHandler.instance().handleServerAboutToStart(this)) { return false; }
+ field_71306_a.info("Preparing level \"" + this.func_71270_I() + "\"");
+ this.func_71247_a(this.func_71270_I(), this.func_71270_I(), k, worldtype, s2);
+ long i1 = System.nanoTime() - j;
+@@ -187,7 +193,7 @@
this.field_71339_n.func_72602_a();
}
-+ FMLCommonHandler.instance().handleServerStarting(this);
-+
- return true;
+- return true;
++ return FMLCommonHandler.instance().handleServerStarting(this);
}
+ public boolean func_71225_e()
diff --git a/fml/patches/minecraft/net/minecraft/server/integrated/IntegratedServer.java.patch b/fml/patches/minecraft/net/minecraft/server/integrated/IntegratedServer.java.patch
index 09c1e5c3c..9cce851ea 100644
--- a/fml/patches/minecraft/net/minecraft/server/integrated/IntegratedServer.java.patch
+++ b/fml/patches/minecraft/net/minecraft/server/integrated/IntegratedServer.java.patch
@@ -7,11 +7,15 @@
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.File;
-@@ -110,6 +111,7 @@
+@@ -108,9 +109,10 @@
+ this.func_71245_h(true);
+ field_71306_a.info("Generating keypair");
this.func_71253_a(CryptManager.func_75891_b());
++ if (!FMLCommonHandler.instance().handleServerAboutToStart(this)) { return false; }
this.func_71247_a(this.func_71270_I(), this.func_71221_J(), this.field_71350_m.func_77160_d(), this.field_71350_m.func_77165_h(), this.field_71350_m.func_82749_j());
this.func_71205_p(this.func_71214_G() + " - " + this.field_71305_c[0].func_72912_H().func_76065_j());
-+ FMLCommonHandler.instance().handleServerStarting(this);
- return true;
+- return true;
++ return FMLCommonHandler.instance().handleServerStarting(this);
}
+ public void func_71217_p()