From 7b3fb203fc27a9a12ed15c16af229e3d60d2ab39 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Fri, 30 Mar 2012 01:12:59 -0400 Subject: [PATCH] Starting to get somewhere --- fml/.classpath | 2 + .../fml/stubs => clientdrop}/mcp/BaseMod.java | 0 .../stubs => clientdrop}/mcp/ModLoader.java | 0 .../fml/stubs => clientdrop}/obf/BaseMod.java | 0 .../stubs => clientdrop}/obf/ModLoader.java | 0 fml/src/fml/CommonRegistry.java | 76 +++++++++++ fml/src/fml/server/FMLHooks.java | 16 +++ fml/src/fml/server/FMLModContainer.java | 1 + fml/src/fml/server/Loader.java | 129 ++++++++++++------ fml/src/fml/server/LoaderException.java | 15 ++ fml/src/fml/server/ModContainer.java | 4 + fml/src/fml/server/ModLoaderModContainer.java | 59 ++++++-- fml/src/fml/stubs/mcpserver/BaseMod.java | 56 -------- fml/src/net/minecraft/src/BaseMod.java | 68 +++++++++ .../minecraft/src}/ModLoader.java | 80 +++-------- fml/test/fml/test/LoaderTests.java | 23 ++++ 16 files changed, 358 insertions(+), 171 deletions(-) rename fml/{src/fml/stubs => clientdrop}/mcp/BaseMod.java (100%) rename fml/{src/fml/stubs => clientdrop}/mcp/ModLoader.java (100%) rename fml/{src/fml/stubs => clientdrop}/obf/BaseMod.java (100%) rename fml/{src/fml/stubs => clientdrop}/obf/ModLoader.java (100%) create mode 100644 fml/src/fml/CommonRegistry.java create mode 100644 fml/src/fml/server/FMLHooks.java create mode 100644 fml/src/fml/server/LoaderException.java delete mode 100644 fml/src/fml/stubs/mcpserver/BaseMod.java create mode 100644 fml/src/net/minecraft/src/BaseMod.java rename fml/src/{fml/stubs/mcpserver => net/minecraft/src}/ModLoader.java (75%) create mode 100644 fml/test/fml/test/LoaderTests.java diff --git a/fml/.classpath b/fml/.classpath index ddd454b0e..1cb18463c 100644 --- a/fml/.classpath +++ b/fml/.classpath @@ -1,7 +1,9 @@ + + diff --git a/fml/src/fml/stubs/mcp/BaseMod.java b/fml/clientdrop/mcp/BaseMod.java similarity index 100% rename from fml/src/fml/stubs/mcp/BaseMod.java rename to fml/clientdrop/mcp/BaseMod.java diff --git a/fml/src/fml/stubs/mcp/ModLoader.java b/fml/clientdrop/mcp/ModLoader.java similarity index 100% rename from fml/src/fml/stubs/mcp/ModLoader.java rename to fml/clientdrop/mcp/ModLoader.java diff --git a/fml/src/fml/stubs/obf/BaseMod.java b/fml/clientdrop/obf/BaseMod.java similarity index 100% rename from fml/src/fml/stubs/obf/BaseMod.java rename to fml/clientdrop/obf/BaseMod.java diff --git a/fml/src/fml/stubs/obf/ModLoader.java b/fml/clientdrop/obf/ModLoader.java similarity index 100% rename from fml/src/fml/stubs/obf/ModLoader.java rename to fml/clientdrop/obf/ModLoader.java diff --git a/fml/src/fml/CommonRegistry.java b/fml/src/fml/CommonRegistry.java new file mode 100644 index 000000000..dcf456c7d --- /dev/null +++ b/fml/src/fml/CommonRegistry.java @@ -0,0 +1,76 @@ +package fml; + +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) { + } + + static void addShapelessRecipe(ItemStack output, Object... params) { + } + + static void addSmelting(int input, ItemStack output) { + } + + public static void registerBlock(Block block) { + Block.blocksList[block.blockID]=block; + } + + 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; + } catch (Exception e) { + //HMMM + } + } + + public static void registerEntityID(Class entityClass, String entityName, int id) { + } + + public static void registerEntityID(Class entityClass, String entityName, int id, int background, int foreground) { + } + + public static void registerTileEntity(Class tileEntityClass, String id) { + } + + public static void addBiome(BiomeGenBase biome) { + } + + public static void addSpawn(Class entityClass, int weightedProb, int min, int max, EnumCreatureType spawnList) { + } + + public static void addSpawn(Class entityClass, int weightedProb, int min, int max, EnumCreatureType spawnList, BiomeGenBase... biomes) { + } + + public static void addSpawn(String entityName, int weightedProb, int min, int max, EnumCreatureType spawnList) { + } + + public static void addSpawn(String entityName, int weightedProb, int min, int max, EnumCreatureType spawnList, BiomeGenBase... biomes) { + } + + public static void removeBiome(BiomeGenBase biome) { + } + + public static void removeSpawn(Class entityClass, EnumCreatureType spawnList) { + } + + public static void removeSpawn(Class entityClass, EnumCreatureType spawnList, BiomeGenBase... biomes) { + } + + public static void removeSpawn(String entityName, EnumCreatureType spawnList) { + } + + public static void removeSpawn(String entityName, EnumCreatureType spawnList, BiomeGenBase... biomes) { + } + +} diff --git a/fml/src/fml/server/FMLHooks.java b/fml/src/fml/server/FMLHooks.java new file mode 100644 index 000000000..889774d3d --- /dev/null +++ b/fml/src/fml/server/FMLHooks.java @@ -0,0 +1,16 @@ +package fml.server; + +public enum FMLHooks { + INSTANCE; + public void worldTickStart(float tickTime) { + for (ModContainer mod : Loader.getModList()) { + mod.tickStart(tickTime); + } + } + + public void worldTickEnd(float tickTime) { + for (ModContainer mod : Loader.getModList()) { + mod.tickEnd(tickTime); + } + } +} diff --git a/fml/src/fml/server/FMLModContainer.java b/fml/src/fml/server/FMLModContainer.java index dbd483ade..1a4d606d6 100644 --- a/fml/src/fml/server/FMLModContainer.java +++ b/fml/src/fml/server/FMLModContainer.java @@ -4,6 +4,7 @@ import fml.Mod; public class FMLModContainer implements ModContainer { private Mod modDescriptor; + private private Object modInstance; public FMLModContainer(Class clazz) { modDescriptor=clazz.getAnnotation(Mod.class); diff --git a/fml/src/fml/server/Loader.java b/fml/src/fml/server/Loader.java index 5b289f01c..c254b0275 100644 --- a/fml/src/fml/server/Loader.java +++ b/fml/src/fml/server/Loader.java @@ -4,65 +4,98 @@ import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.net.MalformedURLException; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.logging.FileHandler; +import java.util.logging.Level; import java.util.logging.Logger; +import java.util.logging.SimpleFormatter; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; +import net.minecraft.src.BaseMod; import fml.Mod; -import fml.stubs.mcpserver.BaseMod; public class Loader { - private enum State { NOINIT, LOADING, PREINIT, INIT, POSTINIT, UP, ERRORED }; + private enum State { + NOINIT, LOADING, PREINIT, INIT, POSTINIT, UP, ERRORED + }; + private static State state; private static Logger LOG = Logger.getLogger("ForgeModLoader.Loader"); private static List mods; + + private static Map namedMods; private static ModClassLoader modClassLoader; - private static Pattern zipJar = Pattern.compile("([\\w]+).(zip|jar)$"); - private static Pattern modClass = Pattern.compile("(.*)(mod_[^\\s]+)\\.class$"); + private static Pattern zipJar = Pattern.compile("([^\\s]+).(zip|jar)$"); + private static Pattern modClass = Pattern.compile("(.*/)(mod\\_[^\\s]+).class$"); public static Loader instance; - + public static void run() { - instance=new Loader(); + LOG.setLevel(Level.ALL); + FileHandler fileHandler; + try { + fileHandler = new FileHandler("ForgeModLoader-%g.log", 0, 3); + System.setProperty("java.util.logging.SimpleFormatter.format", "%1$tc %2$s%n%4$s: %5$s%6$s%n"); + fileHandler.setFormatter(new SimpleFormatter()); + fileHandler.setLevel(Level.ALL); + LOG.addHandler(fileHandler); + } catch (Exception e) { + // Whatever - give up + } + instance = new Loader(); } - + private Loader() { - state=State.NOINIT; + mods = new ArrayList(); + state = State.NOINIT; load(); + sortModList(); preModInit(); modInit(); postModInit(); - state=State.UP; + state = State.UP; + // Make mod list immutable + mods=Collections.unmodifiableList(mods); + } + + private void sortModList() { + // NOOP for a minute } private void preModInit() { - state=State.PREINIT; + state = State.PREINIT; for (ModContainer mod : mods) { if (mod.wantsPreInit()) { + LOG.finer(String.format("Pre-initializing %s", mod.getName())); mod.preInit(); + namedMods.put(mod.getName(), mod); } } } private void modInit() { - state=State.INIT; + state = State.INIT; for (ModContainer mod : mods) { - mod.init(); + LOG.finer(String.format("Initializing %s", mod.getName())); + mod.init(); } } private void postModInit() { - state=State.POSTINIT; + state = State.POSTINIT; for (ModContainer mod : mods) { if (mod.wantsPostInit()) { + LOG.finer(String.format("Post-initializing %s", mod.getName())); mod.postInit(); } } @@ -74,7 +107,7 @@ public class Loader { try { canonicalModsPath = modsDir.getCanonicalPath(); } catch (IOException ioe) { - LOG.severe(String.format("Failed to resolve mods directory mods %s",modsDir.getAbsolutePath())); + LOG.severe(String.format("Failed to resolve mods directory mods %s", modsDir.getAbsolutePath())); LOG.throwing("fml.server.Loader", "initialize", ioe); throw new LoaderException(ioe); } @@ -97,20 +130,22 @@ public class Loader { // Sort the files into alphabetical order first Arrays.sort(modList); - state=State.LOADING; + state = State.LOADING; for (File modFile : modList) { if (modFile.isDirectory()) { LOG.info(String.format("Found directory %s. Attempting load", modFile.getName())); attemptDirLoad(modFile); + LOG.info(String.format("Directory %s loaded successfully", modFile.getName())); } else { Matcher matcher = zipJar.matcher(modFile.getName()); - if (matcher.find()) { + if (matcher.matches()) { 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))); } } } - if (state==State.ERRORED) { + if (state == State.ERRORED) { LOG.severe("A problem has occured during mod loading. Giving up now"); throw new RuntimeException("Giving up please"); } @@ -118,42 +153,49 @@ public class Loader { private void attemptDirLoad(File modDir) { extendClassLoader(modDir); - - File[] content=modDir.listFiles(new FilenameFilter() { + + File[] content = modDir.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return modClass.matcher(name).find(); } }); for (File modClassFile : content) { - LOG.fine(String.format("Found a mod class %s in directory %s. Attempting to load it",modClassFile.getName(),modDir.getName())); - String clazzName=modClass.matcher(modClassFile.getName()).group(2); + 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())); 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())); } } private void loadModClass(File classSource, String classFileName, String clazzName) { try { - Class clazz=Class.forName(clazzName,true,modClassLoader); + System.out.printf("Loading %s\n", clazzName); + Class clazz = Class.forName(clazzName, false, modClassLoader); + System.out.printf("Got %s\n", clazz); if (clazz.isAnnotationPresent(Mod.class)) { // an FML mod mods.add(FMLModContainer.buildFor(clazz)); - } else if (clazz.isAssignableFrom(BaseMod.class)) { - // a modloader mod + } else if (BaseMod.class.isAssignableFrom(clazz)) { + 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)); } else { // Unrecognized } - } catch (ClassNotFoundException e) { - LOG.warning(String.format("Failed to load mod class %s in %s",classFileName,classSource.getName())); - LOG.throwing("fml.server.Loader", "attemptDirLoad", e); - state=State.ERRORED; + } 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); + state = State.ERRORED; } } private void extendClassLoader(File file) { - if (modClassLoader==null) { - modClassLoader=new ModClassLoader(); + if (modClassLoader == null) { + modClassLoader = new ModClassLoader(); } try { modClassLoader.addFile(file); @@ -164,30 +206,27 @@ public class Loader { private void attemptFileLoad(File modFile) { extendClassLoader(modFile); - + try { - ZipFile jar=new ZipFile(modFile); + ZipFile jar = new ZipFile(modFile); for (ZipEntry ze : Collections.list(jar.entries())) { - Matcher match=modClass.matcher(ze.getName()); - if (match.find()) { - String pkg=match.group(1).replace('/', '.'); - String clazzName=pkg+match.group(2); + Matcher match = modClass.matcher(ze.getName()); + 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())); loadModClass(modFile, ze.getName(), clazzName); + 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); - state=State.ERRORED; + state = State.ERRORED; } } - class LoaderException extends RuntimeException { - public LoaderException(Exception wrapped) { - super(wrapped); - } - - public LoaderException() { - } + public static List getModList() { + return mods; } } diff --git a/fml/src/fml/server/LoaderException.java b/fml/src/fml/server/LoaderException.java new file mode 100644 index 000000000..3792dac0d --- /dev/null +++ b/fml/src/fml/server/LoaderException.java @@ -0,0 +1,15 @@ +package fml.server; + +class LoaderException extends RuntimeException { + /** + * + */ + private static final long serialVersionUID = -5675297950958861378L; + + public LoaderException(Exception wrapped) { + super(wrapped); + } + + public LoaderException() { + } +} \ No newline at end of file diff --git a/fml/src/fml/server/ModContainer.java b/fml/src/fml/server/ModContainer.java index 344806de3..c7e53487d 100644 --- a/fml/src/fml/server/ModContainer.java +++ b/fml/src/fml/server/ModContainer.java @@ -6,4 +6,8 @@ public interface ModContainer { void preInit(); void init(); void postInit(); + String getName(); + void tickStart(float tickTime); + void tickEnd(float tickTime); + boolean matches(Object mod); } diff --git a/fml/src/fml/server/ModLoaderModContainer.java b/fml/src/fml/server/ModLoaderModContainer.java index 69c31386e..3dda2caa5 100644 --- a/fml/src/fml/server/ModLoaderModContainer.java +++ b/fml/src/fml/server/ModLoaderModContainer.java @@ -1,30 +1,73 @@ package fml.server; +import net.minecraft.src.BaseMod; + public class ModLoaderModContainer implements ModContainer { + private Class modClazz; + private BaseMod mod; + private boolean isTicking; + public ModLoaderModContainer(Class modClazz) { + this.modClazz=modClazz; + } + public boolean wantsPreInit() { - return false; + return true; } public boolean wantsPostInit() { - return false; + return true; } @Override public void preInit() { - // TODO Auto-generated method stub - + try { + mod=modClazz.newInstance(); + } catch (Exception e) { + throw new LoaderException(e); + } } @Override public void init() { - // TODO Auto-generated method stub - + mod.load(); } @Override public void postInit() { - // TODO Auto-generated method stub - + mod.modsLoaded(); } + @Override + public void tickStart(float tickTime) { + if (isTicking) { + isTicking=mod.onTickInGame(tickTime); + } + } + @Override + public void tickEnd(float tickTime) { + // NOOP for modloader + } + + @Override + public String getName() { + return mod!=null?mod.getName():null; + } + + public static ModContainer findContainerFor(BaseMod mod) { + for (ModContainer mc :Loader.getModList()) { + if (mc.matches(mod)) { + return mc; + } + } + return null; + } + + @Override + public boolean matches(Object mod) { + return modClazz.isInstance(mod); + } + + public void setTicking(boolean enable) { + isTicking=enable; + } } diff --git a/fml/src/fml/stubs/mcpserver/BaseMod.java b/fml/src/fml/stubs/mcpserver/BaseMod.java deleted file mode 100644 index ebb6d07f8..000000000 --- a/fml/src/fml/stubs/mcpserver/BaseMod.java +++ /dev/null @@ -1,56 +0,0 @@ -package fml.stubs.mcpserver; - -import java.util.Random; - -import fml.Mod; - - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.ItemStack; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.World; - -@Mod(name="blah",version="blah") -public interface BaseMod { - int addFuel(int id, int metadata); - - // void addRenderer(Map, Render> renderers); - boolean dispenseEntity(World world, double x, double y, double z, int xVel, int zVel, ItemStack item); - - void generateNether(World world, Random random, int chunkX, int chunkZ); - - void generateSurface(World world, Random random, int chunkX, int chunkZ); - - String getName(); - - String getPriorities(); - - abstract String getVersion(); - - // void keyboardEvent(KeyBinding event); - @Mod.PreInit - abstract void load(); - - @Mod.Init - void modsLoaded(); - - void onItemPickup(EntityPlayer player, ItemStack item); - - // boolean onTickInGame(float tick, Minecraft game); - // boolean onTickInGUI(float tick, Minecraft game, GuiScreen gui); - void receiveChatPacket(String text); - - void receiveCustomPacket(Packet250CustomPayload packet); - - // void registerAnimation(Minecraft game); - // void renderInvBlock(RenderBlocks renderer, Block block, int metadata, int - // modelID); - // boolean renderWorldBlock(RenderBlocks renderer, IBlockAccess world, int x, - // int y, int z, Block block, int modelID); - void takenFromCrafting(EntityPlayer player, ItemStack item, IInventory matrix); - - void takenFromFurnace(EntityPlayer player, ItemStack item); - - String toString(); -} diff --git a/fml/src/net/minecraft/src/BaseMod.java b/fml/src/net/minecraft/src/BaseMod.java new file mode 100644 index 000000000..774fbeb2b --- /dev/null +++ b/fml/src/net/minecraft/src/BaseMod.java @@ -0,0 +1,68 @@ +package net.minecraft.src; + +import java.util.Random; + +import fml.Mod; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.ItemStack; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.World; + +public abstract class BaseMod { + int addFuel(int id, int metadata) { + return 0; + } + + public boolean dispenseEntity(World world, double x, double y, double z, int xVel, int zVel, ItemStack item) { + return false; + } + + public void generateNether(World world, Random random, int chunkX, int chunkZ) { + } + + public void generateSurface(World world, Random random, int chunkX, int chunkZ) { + } + + public String getName() { return ""; } + + public String getPriorities() { + return null; + } + + public abstract String getVersion(); + + public abstract void load(); + + public void modsLoaded() { + } + + public void onItemPickup(EntityPlayer player, ItemStack item) { + } + + // boolean onTickInGame(float tick, Minecraft game); + public boolean onTickInGame(float tick) { + return false; + } + + public void receiveChatPacket(String text) { + } + + public void receiveCustomPacket(Packet250CustomPayload packet) { + } + + public void takenFromCrafting(EntityPlayer player, ItemStack item, IInventory matrix) { + } + + public void takenFromFurnace(EntityPlayer player, ItemStack item) { + + } + + // void addRenderer(Map, Render> renderers); + // void registerAnimation(Minecraft game); + // void renderInvBlock(RenderBlocks renderer, Block block, int metadata, int modelID); + // boolean renderWorldBlock(RenderBlocks renderer, IBlockAccess world, int x, int y, int z, Block block, int modelID); + // boolean onTickInGUI(float tick, Minecraft game, GuiScreen gui); + // void keyboardEvent(KeyBinding event); +} diff --git a/fml/src/fml/stubs/mcpserver/ModLoader.java b/fml/src/net/minecraft/src/ModLoader.java similarity index 75% rename from fml/src/fml/stubs/mcpserver/ModLoader.java rename to fml/src/net/minecraft/src/ModLoader.java index 1013560f4..41375f85c 100644 --- a/fml/src/fml/stubs/mcpserver/ModLoader.java +++ b/fml/src/net/minecraft/src/ModLoader.java @@ -1,8 +1,12 @@ -package fml.stubs.mcpserver; +package net.minecraft.src; import java.util.List; import java.util.logging.Logger; +import fml.CommonRegistry; +import fml.server.Loader; +import fml.server.ModLoaderModContainer; + import net.minecraft.src.Achievement; import net.minecraft.src.BiomeGenBase; import net.minecraft.src.Block; @@ -26,13 +30,6 @@ public class ModLoader { return 0; } - // static void addAllRenderers(Map, Render> renderers) - // { - // } - - // static void addAnimation(TextureFX anim) { - // } - static int addArmor(String armor) { return 0; } @@ -95,10 +92,6 @@ public class ModLoader { return null; } - // static Minecraft getMinecraftInstance() { - // return null; - // } - static T getPrivateValue(Class instanceclass, E instance, int fieldindex) { return null; } @@ -119,10 +112,6 @@ public class ModLoader { return 0; } - // static boolean isGUIOpen(Class gui) { - // return false; - // } - static boolean isModLoaded(String modname) { return false; } @@ -130,100 +119,67 @@ public class ModLoader { static void loadConfig() { } - // static BufferedImage loadImage(RenderEngine texCache, String path) { - // return null; - // } - static void onItemPickup(EntityPlayer player, ItemStack item) { } - // static void onTick(float tick, net.minecraft.client.Minecraft game) { - // } - - // static void openGUI(EntityPlayer player, GuiScreen gui) { - // } - static void populateChunk(IChunkProvider generator, int chunkX, int chunkZ, World world) { } static void receivePacket(Packet250CustomPayload packet) { } - // static KeyBinding[] registerAllKeys(KeyBinding[] keys) { - // return keys; - // } - - // static void registerAllTextureOverrides(RenderEngine cache) { - // } - static void registerBlock(Block block) { + CommonRegistry.registerBlock(block); } static void registerBlock(Block block, Class itemclass) { + CommonRegistry.registerBlock(block, itemclass); } static void registerEntityID(Class entityClass, String entityName, int id) { + CommonRegistry.registerEntityID(entityClass, entityName, id); } static void registerEntityID(Class entityClass, String entityName, int id, int background, int foreground) { + CommonRegistry.registerEntityID(entityClass, entityName, id, background, foreground); } - // static void registerKey(BaseMod mod, KeyBinding keyHandler, boolean - // allowRepeat) { - // } - static void registerPacketChannel(BaseMod mod, String channel) { } static void registerTileEntity(Class tileEntityClass, String id) { + CommonRegistry.registerTileEntity(tileEntityClass, id); } - // static void registerTileEntity(Class tileEntityClass, - // String id, TileEntitySpecialRenderer renderer) { - // } - static void removeBiome(BiomeGenBase biome) { + CommonRegistry.removeBiome(biome); } static void removeSpawn(Class entityClass, EnumCreatureType spawnList) { + CommonRegistry.removeSpawn(entityClass, spawnList); } static void removeSpawn(Class entityClass, EnumCreatureType spawnList, BiomeGenBase... biomes) { + CommonRegistry.removeSpawn(entityClass, spawnList, biomes); } static void removeSpawn(String entityName, EnumCreatureType spawnList) { + CommonRegistry.removeSpawn(entityName, spawnList); } static void removeSpawn(String entityName, EnumCreatureType spawnList, BiomeGenBase... biomes) { + CommonRegistry.removeSpawn(entityName, spawnList, biomes); } - static boolean renderBlockIsItemFull3D(int modelID) { - return false; - } - - // static void renderInvBlock(RenderBlocks renderer, Block block, int - // metadata, int modelID) { - // } - - // static boolean renderWorldBlock(RenderBlocks renderer, IBlockAccess world, - // int x, int y, int z, Block block, int modelID) { - // return false; - // } - static void saveConfig() { } static void serverChat(String text) { } - // static void serverLogin(NetClientHandler handler, Packet1Login loginPacket) - // { - // } - static void setInGameHook(BaseMod mod, boolean enable, boolean useClock) { - } - - static void setInGUIHook(BaseMod mod, boolean enable, boolean useClock) { + ModLoaderModContainer mlmc=(ModLoaderModContainer) ModLoaderModContainer.findContainerFor(mod); + mlmc.setTicking(enable); } static void setPrivateValue(Class instanceclass, T instance, int fieldindex, E value) { @@ -240,4 +196,4 @@ public class ModLoader { static void throwException(String message, Throwable e) { } -} +} \ No newline at end of file diff --git a/fml/test/fml/test/LoaderTests.java b/fml/test/fml/test/LoaderTests.java new file mode 100644 index 000000000..8c6f9644b --- /dev/null +++ b/fml/test/fml/test/LoaderTests.java @@ -0,0 +1,23 @@ +package fml.test; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import fml.server.Loader; + +public class LoaderTests { + + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testModLoading() { + Loader.run(); + } +}