diff --git a/common/fml/Loader.java b/common/fml/Loader.java index ecd5c01c64..1a08635d99 100644 --- a/common/fml/Loader.java +++ b/common/fml/Loader.java @@ -33,6 +33,7 @@ import java.util.zip.ZipFile; import net.minecraft.src.BaseMod; import fml.ml.ModLoaderModContainer; +import fml.obf.FMLHandler; public class Loader { private enum State { @@ -40,7 +41,7 @@ public class Loader { }; private static Loader instance; - private static Logger LOG = Logger.getLogger("ForgeModLoader"); + private static Logger log = Logger.getLogger("ForgeModLoader"); private static Pattern zipJar = Pattern.compile("([^\\s]+).(zip|jar)$"); private static Pattern modClass = Pattern.compile("(.*/)(mod\\_[^\\s]+).class$"); @@ -63,16 +64,16 @@ public class Loader { return instance; } private Loader() { - Loader.LOG.setLevel(Level.ALL); + Loader.log.setParent(FMLHandler.getMinecraftLogger()); FileHandler fileHandler; try { fileHandler = new FileHandler("ForgeModLoader-%g.log", 0, 3); fileHandler.setLevel(Level.ALL); - Loader.LOG.addHandler(fileHandler); + Loader.log.addHandler(fileHandler); } catch (Exception e) { // Whatever - give up } - LOG.info(String.format("Forge Mod Loader version %d.%d.%d.%d for Minecraft %s loading.",major,minor,rev,build,mcversion)); + log.info(String.format("Forge Mod Loader version %d.%d.%d.%d for Minecraft %s loading.",major,minor,rev,build,mcversion)); } private void sortModList() { @@ -83,7 +84,7 @@ public class Loader { state = State.PREINIT; for (ModContainer mod : mods) { if (mod.wantsPreInit()) { - LOG.finer(String.format("Pre-initializing %s", mod.getName())); + log.finer(String.format("Pre-initializing %s", mod.getName())); mod.preInit(); namedMods.put(mod.getName(), mod); } @@ -93,7 +94,7 @@ public class Loader { private void modInit() { state = State.INIT; for (ModContainer mod : mods) { - LOG.finer(String.format("Initializing %s", mod.getName())); + log.finer(String.format("Initializing %s", mod.getName())); mod.init(); } } @@ -102,7 +103,7 @@ public class Loader { state = State.POSTINIT; for (ModContainer mod : mods) { if (mod.wantsPostInit()) { - LOG.finer(String.format("Post-initializing %s", mod.getName())); + log.finer(String.format("Post-initializing %s", mod.getName())); mod.postInit(); } } @@ -114,23 +115,23 @@ public class Loader { try { canonicalModsPath = modsDir.getCanonicalPath(); } catch (IOException ioe) { - LOG.severe(String.format("Failed to resolve mods directory mods %s", modsDir.getAbsolutePath())); - LOG.throwing("fml.server.Loader", "initialize", ioe); + log.severe(String.format("Failed to resolve mods directory mods %s", modsDir.getAbsolutePath())); + log.throwing("fml.server.Loader", "initialize", ioe); throw new LoaderException(ioe); } if (!modsDir.exists()) { - LOG.fine(String.format("No mod directory found, creating one: %s", canonicalModsPath)); + log.fine(String.format("No mod directory found, creating one: %s", canonicalModsPath)); try { modsDir.mkdir(); } catch (Exception e) { - LOG.throwing("fml.server.Loader", "initialize", e); + log.throwing("fml.server.Loader", "initialize", e); throw new LoaderException(e); } } if (!modsDir.isDirectory()) { - LOG.severe(String.format("Attempting to load mods from %s, which is not a directory", canonicalModsPath)); + log.severe(String.format("Attempting to load mods from %s, which is not a directory", canonicalModsPath)); LoaderException loaderException = new LoaderException(); - LOG.throwing("fml.server.Loader", "initialize", loaderException); + log.throwing("fml.server.Loader", "initialize", loaderException); throw loaderException; } File[] modList = modsDir.listFiles(); @@ -140,20 +141,20 @@ public class Loader { state = State.LOADING; for (File modFile : modList) { if (modFile.isDirectory()) { - LOG.info(String.format("Found directory %s. Attempting load", modFile.getName())); + log.info(String.format("Found directory %s. Attempting load", modFile.getName())); attemptDirLoad(modFile); - LOG.info(String.format("Directory %s loaded successfully", modFile.getName())); + log.info(String.format("Directory %s loaded successfully", modFile.getName())); } else { Matcher matcher = zipJar.matcher(modFile.getName()); if (matcher.matches()) { - LOG.info(String.format("Found zip or jar file %s. Attempting load.", matcher.group(0))); + log.info(String.format("Found zip or jar file %s. Attempting load.", matcher.group(0))); attemptFileLoad(modFile); - LOG.info(String.format("File %s loaded successfully.", matcher.group(0))); + log.info(String.format("File %s loaded successfully.", matcher.group(0))); } } } if (state == State.ERRORED) { - LOG.severe("A problem has occured during mod loading. Giving up now"); + log.severe("A problem has occured during mod loading. Giving up now"); throw new RuntimeException("Giving up please"); } } @@ -169,9 +170,9 @@ public class Loader { }); for (File modClassFile : content) { String clazzName = modClass.matcher(modClassFile.getName()).group(2); - LOG.fine(String.format("Found a mod class %s in directory %s. Attempting to load it", clazzName, modDir.getName())); + log.fine(String.format("Found a mod class %s in directory %s. Attempting to load it", clazzName, modDir.getName())); loadModClass(modDir, modClassFile.getName(), clazzName); - LOG.fine(String.format("Successfully loaded mod class %s", modClassFile.getName())); + log.fine(String.format("Successfully loaded mod class %s", modClassFile.getName())); } } @@ -184,18 +185,18 @@ public class Loader { // an FML mod mods.add(FMLModContainer.buildFor(clazz)); } else if (BaseMod.class.isAssignableFrom(clazz)) { - LOG.fine(String.format("ModLoader BaseMod class found: %s. Loading", clazzName)); + log.fine(String.format("ModLoader BaseMod class found: %s. Loading", clazzName)); @SuppressWarnings("unchecked") Class bmClazz = (Class) clazz; ModContainer mc=new ModLoaderModContainer(bmClazz); mods.add(mc); - LOG.fine(String.format("ModLoader BaseMod class loaded: %s.", clazzName)); + log.fine(String.format("ModLoader BaseMod class loaded: %s.", clazzName)); } else { // Unrecognized } } catch (Exception e) { - LOG.warning(String.format("Failed to load mod class %s in %s", classFileName, classSource.getName())); - LOG.throwing("fml.server.Loader", "attemptLoad", e); + log.warning(String.format("Failed to load mod class %s in %s", classFileName, classSource.getName())); + log.throwing("fml.server.Loader", "attemptLoad", e); state = State.ERRORED; } } @@ -221,14 +222,14 @@ public class Loader { if (match.matches()) { String pkg = match.group(1).replace('/', '.'); String clazzName = pkg + match.group(2); - LOG.fine(String.format("Found a mod class %s in file %s. Attempting to load it", clazzName, modFile.getName())); + log.fine(String.format("Found a mod class %s in file %s. Attempting to load it", clazzName, modFile.getName())); loadModClass(modFile, ze.getName(), clazzName); - LOG.fine(String.format("Mod class %s loaded successfully", clazzName, modFile.getName())); + log.fine(String.format("Mod class %s loaded successfully", clazzName, modFile.getName())); } } } catch (Exception e) { - LOG.warning(String.format("Zip file %s failed to read properly", modFile.getName())); - LOG.throwing("fml.server.Loader", "attemptFileLoad", e); + log.warning(String.format("Zip file %s failed to read properly", modFile.getName())); + log.throwing("fml.server.Loader", "attemptFileLoad", e); state = State.ERRORED; } } @@ -251,6 +252,9 @@ public class Loader { modInit(); postModInit(); state = State.UP; - LOG.info("Forge Mod Loader load complete"); + log.info("Forge Mod Loader load complete"); + } + public static boolean isModLoaded(String modname) { + return instance().namedMods.containsKey(modname); } } diff --git a/common/fml/CommonRegistry.java b/common/net/minecraft/src/CommonRegistry.java similarity index 70% rename from common/fml/CommonRegistry.java rename to common/net/minecraft/src/CommonRegistry.java index bb9ae5252a..842935afe6 100644 --- a/common/fml/CommonRegistry.java +++ b/common/net/minecraft/src/CommonRegistry.java @@ -11,49 +11,47 @@ * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -package fml; +package net.minecraft.src; -import net.minecraft.src.BiomeGenBase; -import net.minecraft.src.Block; -import net.minecraft.src.Entity; -import net.minecraft.src.EntityLiving; -import net.minecraft.src.EnumCreatureType; -import net.minecraft.src.Item; -import net.minecraft.src.ItemBlock; -import net.minecraft.src.ItemStack; -import net.minecraft.src.TileEntity; public class CommonRegistry { - static void addRecipe(ItemStack output, Object... params) { + public static void addRecipe(ItemStack output, Object... params) { + CraftingManager.getInstance().addRecipe(output, params); } - static void addShapelessRecipe(ItemStack output, Object... params) { + public static void addShapelessRecipe(ItemStack output, Object... params) { + CraftingManager.getInstance().addShapelessRecipe(output, params); } - static void addSmelting(int input, ItemStack output) { + public static void addSmelting(int input, ItemStack output) { + FurnaceRecipes.smelting().addSmelting(input, output); } public static void registerBlock(Block block) { - Block.blocksList[block.blockID]=block; + registerBlock(block,ItemBlock.class); } public static void registerBlock(Block block, Class itemclass) { - registerBlock(block); try { - ItemBlock bl=itemclass.getConstructor(int.class).newInstance(block.blockID); - Item.itemsList[bl.shiftedIndex-256]=bl; + assert block!=null : "registerBlock: block cannot be null"; + assert itemclass!=null : "registerBlock: itemclass cannot be null"; + int blockItemId=block.blockID-256; + itemclass.getConstructor(int.class).newInstance(blockItemId); } catch (Exception e) { //HMMM } } public static void registerEntityID(Class entityClass, String entityName, int id) { + EntityList.addNewMapping(entityClass, entityName, id); } - public static void registerEntityID(Class entityClass, String entityName, int id, int background, int foreground) { + public static void registerEntityID(Class entityClass, String entityName, int id, int backgroundEggColour, int foregroundEggColour) { + EntityList.addNewMapping(entityClass, entityName, id, backgroundEggColour, foregroundEggColour); } public static void registerTileEntity(Class tileEntityClass, String id) { + TileEntity.addTileEntityMapping(tileEntityClass, id); } public static void addBiome(BiomeGenBase biome) { diff --git a/server/fml/ml/ModLoaderModContainer.java b/server/fml/ml/ModLoaderModContainer.java index 414f6d1f72..ab71ddf6f9 100644 --- a/server/fml/ml/ModLoaderModContainer.java +++ b/server/fml/ml/ModLoaderModContainer.java @@ -13,6 +13,9 @@ */ package fml.ml; +import java.util.ArrayList; +import java.util.List; + import fml.Loader; import fml.LoaderException; import fml.ModContainer; @@ -87,4 +90,14 @@ public class ModLoaderModContainer implements ModContainer { public void setTicking(boolean enable) { isTicking=enable; } + + public static List findAll() { + ArrayList modList=new ArrayList(); + for (ModContainer mc : Loader.getModList()) { + if (mc instanceof ModLoaderModContainer) { + modList.add(((ModLoaderModContainer)mc).mod); + } + } + return modList; + } } diff --git a/server/fml/obf/FMLHandler.java b/server/fml/obf/FMLHandler.java index 492ba3ccff..46b462e150 100644 --- a/server/fml/obf/FMLHandler.java +++ b/server/fml/obf/FMLHandler.java @@ -13,6 +13,8 @@ */ package fml.obf; +import java.util.logging.Logger; + import fml.FMLHooks; import fml.Loader; import net.minecraft.server.MinecraftServer; @@ -41,4 +43,8 @@ public enum FMLHandler { public MinecraftServer getServer() { return server; } + + public static Logger getMinecraftLogger() { + return MinecraftServer.logger; + } } diff --git a/server/net/minecraft/src/ModLoader.java b/server/net/minecraft/src/ModLoader.java index 5d35f4b199..c50535ce75 100644 --- a/server/net/minecraft/src/ModLoader.java +++ b/server/net/minecraft/src/ModLoader.java @@ -16,9 +16,9 @@ package net.minecraft.src; import java.util.List; import java.util.logging.Logger; -import fml.CommonRegistry; import fml.Loader; import fml.ml.ModLoaderModContainer; +import fml.obf.FMLHandler; import net.minecraft.src.Achievement; import net.minecraft.src.BiomeGenBase; @@ -70,24 +70,31 @@ public class ModLoader { } static void addRecipe(ItemStack output, Object... params) { + CraftingManager.getInstance().addRecipe(output, params); } static void addShapelessRecipe(ItemStack output, Object... params) { + CraftingManager.getInstance().addShapelessRecipe(output, params); } static void addSmelting(int input, ItemStack output) { + FurnaceRecipes.smelting().addSmelting(input, output); } static void addSpawn(Class entityClass, int weightedProb, int min, int max, EnumCreatureType spawnList) { + CommonRegistry.addSpawn(entityClass, weightedProb, min, max, spawnList); } static void addSpawn(Class entityClass, int weightedProb, int min, int max, EnumCreatureType spawnList, BiomeGenBase... biomes) { + CommonRegistry.addSpawn(entityClass, weightedProb, min, max, spawnList, biomes); } static void addSpawn(String entityName, int weightedProb, int min, int max, EnumCreatureType spawnList) { + CommonRegistry.addSpawn(entityName, weightedProb, min, max, spawnList); } static void addSpawn(String entityName, int weightedProb, int min, int max, EnumCreatureType spawnList, BiomeGenBase... biomes) { + CommonRegistry.addSpawn(entityName, weightedProb, min, max, spawnList, biomes); } static boolean dispenseEntity(World world, double x, double y, double z, int xVel, int zVel, ItemStack item) { @@ -98,11 +105,11 @@ public class ModLoader { } static List getLoadedMods() { - return null; + return ModLoaderModContainer.findAll(); } static Logger getLogger() { - return null; + return FMLHandler.getMinecraftLogger(); } static T getPrivateValue(Class instanceclass, E instance, int fieldindex) { @@ -113,29 +120,12 @@ public class ModLoader { return null; } - static int getUniqueBlockModelID(BaseMod mod, boolean full3DItem) { - return 0; - } - static int getUniqueEntityId() { return 0; } - static int getUniqueSpriteIndex(String path) { - return 0; - } - static boolean isModLoaded(String modname) { - return false; - } - - static void loadConfig() { - } - - static void onItemPickup(EntityPlayer player, ItemStack item) { - } - - static void populateChunk(IChunkProvider generator, int chunkX, int chunkZ, World world) { + return Loader.isModLoaded(modname); } static void receivePacket(Packet250CustomPayload packet) {