From e0e77a6bb5cadb80a3c2bdfbce9df1ed0f2ff0bf Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Sat, 5 May 2012 14:42:46 -0400 Subject: [PATCH] API is restored for client side. Implementation starting. --- fml/build.xml | 2 +- fml/client/net/minecraft/src/BaseMod.java | 35 +- .../net/minecraft/src/ClientRegistry.java | 9 + fml/client/net/minecraft/src/ModLoader.java | 341 +++++++++++++----- .../cpw/mods/fml/common/FMLLogFormatter.java | 66 ++++ fml/common/cpw/mods/fml/common/Loader.java | 14 +- .../net/minecraft/src/CommonRegistry.java | 7 + fml/eclipse/FML-Server/.project | 5 + .../net/minecraft/client/Minecraft.java.patch | 8 + .../src/TileEntityRenderer.java.patch | 11 + 10 files changed, 392 insertions(+), 106 deletions(-) create mode 100644 fml/common/cpw/mods/fml/common/FMLLogFormatter.java create mode 100644 fml/patches/minecraft/net/minecraft/src/TileEntityRenderer.java.patch diff --git a/fml/build.xml b/fml/build.xml index eedd2c4e5..886831da2 100644 --- a/fml/build.xml +++ b/fml/build.xml @@ -196,7 +196,7 @@ - + diff --git a/fml/client/net/minecraft/src/BaseMod.java b/fml/client/net/minecraft/src/BaseMod.java index 8d5ba4ea1..3b3254e19 100644 --- a/fml/client/net/minecraft/src/BaseMod.java +++ b/fml/client/net/minecraft/src/BaseMod.java @@ -13,6 +13,7 @@ package net.minecraft.src; */ +import java.util.Map; import java.util.Random; import net.minecraft.client.Minecraft; @@ -127,6 +128,9 @@ public abstract class BaseMod implements IWorldGenerator, IPickupNotifier, IDisp return 0; } + public void addRenderer(Map, Render> renderers) { + + } /** * Override if you wish to perform some action other than just dispensing the item from the dispenser * @param world @@ -192,6 +196,9 @@ public abstract class BaseMod implements IWorldGenerator, IPickupNotifier, IDisp /** * Load your mod */ + public void keyboardEvent(KeyBinding event) { + + } public abstract void load(); /** @@ -220,26 +227,38 @@ public abstract class BaseMod implements IWorldGenerator, IPickupNotifier, IDisp return false; } + public boolean onTickInGUI(float tick, Minecraft game, GuiScreen gui) + { + return false; + } /** - * Not implemented because on the server you don't know who it's from * {@link #onChatMessageReceived(EntityPlayer, Packet3Chat)} * @param text */ - @Deprecated public void receiveChatPacket(String text) { + //TODO } /** - * Not implemented because on the server you don't know who it's from * {@link #onPacket250Received(EntityPlayer, Packet250CustomPayload)} * @param packet */ - @Deprecated public void receiveCustomPacket(Packet250CustomPayload packet) { + //TODO } + public void registerAnimation(Minecraft game) { + + } + public void renderInvBlock(RenderBlocks renderer, Block block, int metadata, int modelID) { + + } + public boolean renderWorldBlock(RenderBlocks renderer, IBlockAccess world, int x, int y, int z, Block block, int modelID) { + return false; + + } /** * Called when someone crafts an item from a crafting table * @param player @@ -319,12 +338,4 @@ public abstract class BaseMod implements IWorldGenerator, IPickupNotifier, IDisp { } - // Spare client junk - // ------- - // 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/client/net/minecraft/src/ClientRegistry.java b/fml/client/net/minecraft/src/ClientRegistry.java index daf58099a..60b0afac2 100644 --- a/fml/client/net/minecraft/src/ClientRegistry.java +++ b/fml/client/net/minecraft/src/ClientRegistry.java @@ -6,6 +6,9 @@ import java.util.List; public class ClientRegistry implements IMinecraftRegistry { + public static ClientRegistry instance() { + return (ClientRegistry) CommonRegistry.instance(); + } @Override public void addRecipe(ItemStack output, Object... params) { @@ -64,6 +67,12 @@ public class ClientRegistry implements IMinecraftRegistry TileEntity.addNewTileEntityMapping(tileEntityClass, id); } + public void registerTileEntity(Class tileEntityClass, String id, TileEntitySpecialRenderer specialRenderer) + { + registerTileEntity(tileEntityClass, id); + TileEntityRenderer.setTileEntityRenderer(tileEntityClass, specialRenderer); + } + @Override public void addBiome(BiomeGenBase biome) { diff --git a/fml/client/net/minecraft/src/ModLoader.java b/fml/client/net/minecraft/src/ModLoader.java index 269098231..e6f4a3a93 100644 --- a/fml/client/net/minecraft/src/ModLoader.java +++ b/fml/client/net/minecraft/src/ModLoader.java @@ -1,4 +1,5 @@ package net.minecraft.src; + /* * The FML Forge Mod Loader suite. Copyright (C) 2012 cpw * @@ -12,8 +13,9 @@ package net.minecraft.src; * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ - +import java.awt.image.BufferedImage; import java.util.List; +import java.util.Map; import java.util.logging.Logger; import net.minecraft.client.Minecraft; @@ -28,20 +30,22 @@ public class ModLoader { /** * Not used on the server. - * + * * @param achievement * @param name * @param description */ public static void addAchievementDesc(Achievement achievement, String name, String description) { - + } /** - * This method is a call in hook from modified external code. Implemented elsewhere. - * + * This method is a call in hook from modified external code. Implemented + * elsewhere. + * * {@link FMLClientHandler#fuelLookup(int, int)} + * * @param id * @param metadata * @return @@ -52,21 +56,30 @@ public class ModLoader return 0; } + static void addAllRenderers(Map, Render> renderers) + { + } + + static void addAnimation(TextureFX anim) + { + } + /** * This method is unimplemented in server versions to date. - * + * * @param armor * @return */ - @Deprecated public static int addArmor(String armor) { + // TODO return 0; } /** - * This method adds the supplied biome to the set of candidate biomes for the default world generator type. - * + * This method adds the supplied biome to the set of candidate biomes for + * the default world generator type. + * * @param biome */ public static void addBiome(BiomeGenBase biome) @@ -76,71 +89,78 @@ public class ModLoader /** * Unimplemented on the server as it does not generate names + * * @param key * @param value */ - @Deprecated public static void addLocalization(String key, String value) { + // TODO } /** * Unimplemented on the server as it does not generate names + * * @param key * @param lang * @param value */ - @Deprecated public static void addLocalization(String key, String lang, String value) { + // TODO } /** * Unimplemented on the server as it does not generate names + * * @param instance * @param name */ - @Deprecated public static void addName(Object instance, String name) { + // TODO } /** * Unimplemented on the server as it does not generate names + * * @param instance * @param lang * @param name */ - @Deprecated public static void addName(Object instance, String lang, String name) { + // TODO } /** * Unimplemented on the server as it does not render textures + * * @param fileToOverride * @param fileToAdd * @return */ - @Deprecated public static int addOverride(String fileToOverride, String fileToAdd) { + // TODO return 0; } /** * Unimplemented on the server as it does not render textures + * * @param path * @param overlayPath * @param index */ - @Deprecated public static void addOverride(String path, String overlayPath, int index) { + // TODO } /** * Add a Shaped Recipe + * * @param output * @param params */ @@ -151,6 +171,7 @@ public class ModLoader /** * Add a shapeless recipe + * * @param output * @param params */ @@ -161,6 +182,7 @@ public class ModLoader /** * Add a new product to be smelted + * * @param input * @param output */ @@ -171,19 +193,21 @@ public class ModLoader /** * Add a mob to the spawn list + * * @param entityClass * @param weightedProb * @param min * @param max * @param spawnList */ - 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) { CommonRegistry.addSpawn(entityClass, weightedProb, min, max, spawnList, FMLClientHandler.instance().getDefaultOverworldBiomes()); } /** * Add a mob to the spawn list + * * @param entityClass * @param weightedProb * @param min @@ -191,13 +215,15 @@ public class ModLoader * @param spawnList * @param biomes */ - public static void addSpawn(Class entityClass, int weightedProb, int min, int max, EnumCreatureType spawnList, BiomeGenBase... biomes) + public static void addSpawn(Class entityClass, int weightedProb, int min, int max, EnumCreatureType spawnList, + BiomeGenBase... biomes) { CommonRegistry.addSpawn(entityClass, weightedProb, min, max, spawnList, biomes); } /** * Add a mob to the spawn list + * * @param entityName * @param weightedProb * @param min @@ -211,6 +237,7 @@ public class ModLoader /** * Add a mob to the spawn list + * * @param entityName * @param weightedProb * @param min @@ -224,8 +251,10 @@ public class ModLoader } /** - * This method is a call in hook from modified external code. Implemented elsewhere. + * This method is a call in hook from modified external code. Implemented + * elsewhere. * {@link FMLClientHandler#tryDispensingEntity(World, double, double, double, byte, byte, ItemStack)} + * * @param world * @param x * @param y @@ -243,6 +272,7 @@ public class ModLoader /** * Remove a container and drop all the items in it on the ground around + * * @param world * @param x * @param y @@ -257,7 +287,7 @@ public class ModLoader return; } - IInventory inv = (IInventory)te; + IInventory inv = (IInventory) te; for (int l = 0; l < inv.func_469_c(); l++) { @@ -278,19 +308,20 @@ public class ModLoader if (i1 > itemstack.field_1615_a) { - i1 = itemstack.field_1615_a ; + i1 = itemstack.field_1615_a; } - itemstack.field_1615_a -= i1; - EntityItem entityitem = new EntityItem(world, (float)te.field_823_f + f, (float)te.field_822_g + f1, (float)te.field_821_h + f2, new ItemStack(itemstack.field_1617_c, i1, itemstack.func_21181_i())); + itemstack.field_1615_a -= i1; + EntityItem entityitem = new EntityItem(world, (float) te.field_823_f + f, (float) te.field_822_g + f1, (float) te.field_821_h + f2, + new ItemStack(itemstack.field_1617_c, i1, itemstack.func_21181_i())); float f3 = 0.05F; - entityitem.field_608_an = (float)world.field_1037_n.nextGaussian() * f3; - entityitem.field_607_ao = (float)world.field_1037_n.nextGaussian() * f3 + 0.2F; - entityitem.field_606_ap = (float)world.field_1037_n.nextGaussian() * f3; + entityitem.field_608_an = (float) world.field_1037_n.nextGaussian() * f3; + entityitem.field_607_ao = (float) world.field_1037_n.nextGaussian() * f3 + 0.2F; + entityitem.field_606_ap = (float) world.field_1037_n.nextGaussian() * f3; if (itemstack.func_40710_n()) { - entityitem.field_801_a.func_40706_d((NBTTagCompound)itemstack.func_40709_o().func_40195_b()); + entityitem.field_801_a.func_40706_d((NBTTagCompound) itemstack.func_40709_o().func_40195_b()); } world.func_674_a(entityitem); @@ -301,6 +332,7 @@ public class ModLoader /** * Get a list of all BaseMod loaded into the system * {@link ModLoaderModContainer#findAll} + * * @return */ public static List getLoadedMods() @@ -309,8 +341,8 @@ public class ModLoader } /** - * Get a logger instance - * {@link FMLClientHandler#getFMLLogger()} + * Get a logger instance {@link FMLClientHandler#getFMLLogger()} + * * @return */ public static Logger getLogger() @@ -318,15 +350,32 @@ public class ModLoader return FMLCommonHandler.instance().getFMLLogger(); } + static Minecraft getMinecraftInstance() + { + return FMLClientHandler.instance().getClient(); + } + + /** + * This is not the server {@link FMLClientHandler#getServer()} + * + * @return + */ + @Deprecated + public static Minecraft getMinecraftServerInstance() + { + return null; + } + /** * Get a value from a field using reflection * {@link ReflectionHelper#getPrivateValue(Class, Object, int)} + * * @param instanceclass * @param instance * @param fieldindex * @return */ - public static T getPrivateValue(Class instanceclass, E instance, int fieldindex) + public static T getPrivateValue(Class instanceclass, E instance, int fieldindex) { return ReflectionHelper.getPrivateValue(instanceclass, instance, fieldindex); } @@ -334,19 +383,30 @@ public class ModLoader /** * Get a value from a field using reflection * {@link ReflectionHelper#getPrivateValue(Class, Object, String)} + * * @param instanceclass * @param instance * @param field * @return */ - public static T getPrivateValue(Class instanceclass, E instance, String field) + public static T getPrivateValue(Class instanceclass, E instance, String field) { return ReflectionHelper.getPrivateValue(instanceclass, instance, field); } /** - * Get a new unique entity id - * {@link Entity#getNextId()} + * Stubbed method on the server to return a unique model id + * + */ + public static int getUniqueBlockModelID(BaseMod mod, boolean flag) + { + // TODO + return 0; + } + + /** + * Get a new unique entity id {@link Entity#getNextId()} + * * @return */ public static int getUniqueEntityId() @@ -354,9 +414,34 @@ public class ModLoader return FMLCommonHandler.instance().nextUniqueEntityListId(); } + static int getUniqueSpriteIndex(String path) + { + // TODO + return 0; + } + /** - * Is the named mod loaded? - * {@link Loader#isModLoaded(String)} + * To properly implement packet 250 protocol you should always check your + * channel is active prior to sending the packet + * + * @param player + * @param channel + * @return + */ + public static boolean isChannelActive(EntityPlayer player, String channel) + { + return FMLCommonHandler.instance().isChannelActive(channel, player); + } + + static boolean isGUIOpen(Class gui) + { + //TODO + return false; + } + + /** + * Is the named mod loaded? {@link Loader#isModLoaded(String)} + * * @param modname * @return */ @@ -366,8 +451,49 @@ public class ModLoader } /** - * This method is a call in hook from modified external code. Implemented elsewhere. + * Implemented elsewhere + */ + @Deprecated + static void loadConfig() + { + } + + static BufferedImage loadImage(RenderEngine texCache, String path) + { + //TODO + return null; + } + + /** + * Call in from elsewhere. Unimplemented here. + * @param player + * @param item + */ + @Deprecated + static void onItemPickup(EntityPlayer player, ItemStack item) + { + } + + static void onTick(float tick, Minecraft game) + { + //TODO + } + + static void openGUI(EntityPlayer player, GuiScreen gui) + { + //TODO + } + + @Deprecated + static void populateChunk(IChunkProvider generator, int chunkX, int chunkZ, World world) + { + } + + /** + * This method is a call in hook from modified external code. Implemented + * elsewhere. * {@link FMLClientHandler#handlePacket250(Packet250CustomPayload, EntityPlayer)} + * * @param packet */ @Deprecated @@ -375,8 +501,20 @@ public class ModLoader { } + static KeyBinding[] registerAllKeys(KeyBinding[] keys) + { + //TODO + return keys; + } + + static void registerAllTextureOverrides(RenderEngine cache) + { + //TODO + } + /** * Register a new block + * * @param block */ public static void registerBlock(Block block) @@ -386,42 +524,52 @@ public class ModLoader /** * Register a new block + * * @param block * @param itemclass */ - public static void registerBlock(Block block, Class itemclass) + public static void registerBlock(Block block, Class itemclass) { CommonRegistry.registerBlock(block, itemclass); } /** * Register a new entity ID + * * @param entityClass * @param entityName * @param id */ - public static void registerEntityID(Class entityClass, String entityName, int id) + public static void registerEntityID(Class entityClass, String entityName, int id) { CommonRegistry.registerEntityID(entityClass, entityName, id); } /** * Register a new entity ID + * * @param entityClass * @param entityName * @param id * @param background * @param foreground */ - 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 background, int foreground) { CommonRegistry.registerEntityID(entityClass, entityName, id, background, foreground); } + static void registerKey(BaseMod mod, KeyBinding keyHandler, boolean allowRepeat) + { + //TODO + } + /** - * Register the mod for packets on this channel. This only registers the channel with Forge Mod Loader, not - * with clients connecting- use BaseMod.onClientLogin to tell them about your custom channel + * Register the mod for packets on this channel. This only registers the + * channel with Forge Mod Loader, not with clients connecting- use + * BaseMod.onClientLogin to tell them about your custom channel * {@link FMLCommonHandler#registerChannel(cpw.mods.fml.common.ModContainer, String)} + * * @param mod * @param channel */ @@ -432,19 +580,25 @@ public class ModLoader /** * Register a new tile entity class + * * @param tileEntityClass * @param id */ - public static void registerTileEntity(Class tileEntityClass, String id) + public static void registerTileEntity(Class tileEntityClass, String id) { CommonRegistry.registerTileEntity(tileEntityClass, id); } + static void registerTileEntity(Class tileEntityClass, String id, TileEntitySpecialRenderer renderer) + { + ClientRegistry.instance().registerTileEntity(tileEntityClass, id, renderer); + } + /** - * Remove a biome. This code will probably not work correctly and will likely corrupt worlds. + * Remove a biome from the list of generated biomes + * * @param biome */ - @Deprecated public static void removeBiome(BiomeGenBase biome) { CommonRegistry.removeBiome(biome); @@ -452,27 +606,30 @@ public class ModLoader /** * Remove a spawn + * * @param entityClass * @param spawnList */ - public static void removeSpawn(Class entityClass, EnumCreatureType spawnList) + public static void removeSpawn(Class entityClass, EnumCreatureType spawnList) { CommonRegistry.removeSpawn(entityClass, spawnList, FMLClientHandler.instance().getDefaultOverworldBiomes()); } /** * Remove a spawn + * * @param entityClass * @param spawnList * @param biomes */ - public static void removeSpawn(Class entityClass, EnumCreatureType spawnList, BiomeGenBase... biomes) + public static void removeSpawn(Class entityClass, EnumCreatureType spawnList, BiomeGenBase... biomes) { CommonRegistry.removeSpawn(entityClass, spawnList, biomes); } /** * Remove a spawn + * * @param entityName * @param spawnList */ @@ -483,6 +640,7 @@ public class ModLoader /** * Remove a spawn + * * @param entityName * @param spawnList * @param biomes @@ -492,9 +650,25 @@ public class ModLoader CommonRegistry.removeSpawn(entityName, spawnList, biomes); } + static boolean renderBlockIsItemFull3D(int modelID) + { + //TODO + return false; + } + + static void renderInvBlock(RenderBlocks renderer, Block block, int metadata, int modelID) + { + //TODO + } + + static boolean renderWorldBlock(RenderBlocks renderer, IBlockAccess world, int x, int y, int z, Block block, int modelID) + { + //TODO + return false; + } + /** - * Configuration is handled elsewhere - * {@link ModLoaderModContainer} + * Configuration is handled elsewhere {@link ModLoaderModContainer} */ @Deprecated public static void saveConfig() @@ -502,24 +676,32 @@ public class ModLoader } /** - * This method is unimplemented on the server: it is meant for clients to send chat to the server + * Send a chat message to the server + * * {@link FMLClientHandler#handleChatPacket(Packet3Chat, EntityPlayer)} + * * @param text */ - @Deprecated public static void serverChat(String text) { + //TODO + } + + static void serverLogin(NetClientHandler handler, Packet1Login loginPacket) + { + //TODO } /** * Indicate that you want to receive ticks - * + * * @param mod - * receiving the events + * receiving the events * @param enable - * indicates whether you want to recieve them or not + * indicates whether you want to recieve them or not * @param useClock - * Not used in server side: all ticks are sent on the server side (no render subticks) + * Not used in server side: all ticks are sent on the server side + * (no render subticks) */ public static void setInGameHook(BaseMod mod, boolean enable, boolean useClock) { @@ -527,15 +709,22 @@ public class ModLoader mlmc.setTicking(enable); } + + static void setInGUIHook(BaseMod mod, boolean enable, boolean useClock) + { + //TODO + } + /** * Set a private field to a value using reflection * {@link ReflectionHelper#setPrivateValue(Class, Object, int, Object)} + * * @param instanceclass * @param instance * @param fieldindex * @param value */ - public static void setPrivateValue(Class instanceclass, T instance, int fieldindex, E value) + public static void setPrivateValue(Class instanceclass, T instance, int fieldindex, E value) { ReflectionHelper.setPrivateValue(instanceclass, instance, fieldindex, value); } @@ -543,19 +732,22 @@ public class ModLoader /** * Set a private field to a value using reflection * {@link ReflectionHelper#setPrivateValue(Class, Object, String, Object)} + * * @param instanceclass * @param instance * @param field * @param value */ - public static void setPrivateValue(Class instanceclass, T instance, String field, E value) + public static void setPrivateValue(Class instanceclass, T instance, String field, E value) { ReflectionHelper.setPrivateValue(instanceclass, instance, field, value); } /** - * This method is a call in hook from modified external code. Implemented elsewhere. + * This method is a call in hook from modified external code. Implemented + * elsewhere. * {@link FMLClientHandler#onItemCrafted(EntityPlayer, ItemStack, IInventory)} + * * @param player * @param item * @param matrix @@ -566,8 +758,10 @@ public class ModLoader } /** - * This method is a call in hook from modified external code. Implemented elsewhere. + * This method is a call in hook from modified external code. Implemented + * elsewhere. * {@link FMLClientHandler#onItemSmelted(EntityPlayer, ItemStack)} + * * @param player * @param item */ @@ -579,6 +773,7 @@ public class ModLoader /** * Throw the offered exception. Likely will stop the game. * {@link FMLClientHandler#raiseException(Throwable, String, boolean)} + * * @param message * @param e */ @@ -586,36 +781,4 @@ public class ModLoader { FMLClientHandler.instance().raiseException(e, message, true); } - - /** - * Get the minecraft server instance - * {@link FMLClientHandler#getServer()} - * @return - */ - public static Minecraft getMinecraftServerInstance() - { - return FMLClientHandler.instance().getClient(); - } - - /** - * To properly implement packet 250 protocol you should always check your channel - * is active prior to sending the packet - * - * @param player - * @param channel - * @return - */ - public static boolean isChannelActive(EntityPlayer player, String channel) - { - return FMLCommonHandler.instance().isChannelActive(channel, player); - } - - /** - * Stubbed method on the server to return a unique model id - * - */ - @Deprecated - public static int getUniqueBlockModelID(BaseMod mod, boolean flag) { - return 0; - } } \ No newline at end of file diff --git a/fml/common/cpw/mods/fml/common/FMLLogFormatter.java b/fml/common/cpw/mods/fml/common/FMLLogFormatter.java new file mode 100644 index 000000000..b6878b78b --- /dev/null +++ b/fml/common/cpw/mods/fml/common/FMLLogFormatter.java @@ -0,0 +1,66 @@ +package cpw.mods.fml.common; + +/** + * Copied from ConsoleLogFormatter for shared use on the client + * + */ +import java.io.PrintWriter; +import java.io.StringWriter; +import java.text.SimpleDateFormat; +import java.util.logging.Formatter; +import java.util.logging.Level; +import java.util.logging.LogRecord; + +final class FMLLogFormatter extends Formatter +{ + private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public String format(LogRecord record) + { + StringBuilder msg = new StringBuilder(); + msg.append(this.dateFormat.format(Long.valueOf(record.getMillis()))); + Level lvl = record.getLevel(); + + if (lvl == Level.FINEST) + { + msg.append(" [FINEST] "); + } + else if (lvl == Level.FINER) + { + msg.append(" [FINER] "); + } + else if (lvl == Level.FINE) + { + 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(record.getMessage()); + msg.append('\n'); + Throwable thr = record.getThrown(); + + if (thr != null) + { + StringWriter thrDump = new StringWriter(); + thr.printStackTrace(new PrintWriter(thrDump)); + msg.append(thrDump.toString()); + } + + return msg.toString(); + } +} diff --git a/fml/common/cpw/mods/fml/common/Loader.java b/fml/common/cpw/mods/fml/common/Loader.java index 90c44cb7f..2f816eb20 100644 --- a/fml/common/cpw/mods/fml/common/Loader.java +++ b/fml/common/cpw/mods/fml/common/Loader.java @@ -23,6 +23,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.logging.ConsoleHandler; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; @@ -128,17 +129,22 @@ public class Loader private Loader() { + FMLLogFormatter formatter=new FMLLogFormatter(); if (FMLCommonHandler.instance().getMinecraftLogger()!=null) { Loader.log.setParent(FMLCommonHandler.instance().getMinecraftLogger()); + } else { + ConsoleHandler ch=new ConsoleHandler(); + Loader.log.setUseParentHandlers(false); + Loader.log.addHandler(ch); + ch.setFormatter(formatter); + } Loader.log.setLevel(Level.ALL); - FileHandler fileHandler; - try { - fileHandler = new FileHandler("ForgeModLoader-%g.log", 0, 3); + FileHandler fileHandler = new FileHandler("ForgeModLoader-%g.log", 0, 3); // We're stealing minecraft's log formatter - fileHandler.setFormatter(FMLCommonHandler.instance().getMinecraftLogger().getHandlers()[0].getFormatter()); + fileHandler.setFormatter(new FMLLogFormatter()); fileHandler.setLevel(Level.ALL); Loader.log.addHandler(fileHandler); } diff --git a/fml/common/net/minecraft/src/CommonRegistry.java b/fml/common/net/minecraft/src/CommonRegistry.java index de29cfa1d..0ec074f2c 100644 --- a/fml/common/net/minecraft/src/CommonRegistry.java +++ b/fml/common/net/minecraft/src/CommonRegistry.java @@ -98,5 +98,12 @@ public class CommonRegistry { instance.removeSpawn(entityName, spawnList, biomes); } + /** + * @return + */ + public static IMinecraftRegistry instance() + { + return instance; + } } diff --git a/fml/eclipse/FML-Server/.project b/fml/eclipse/FML-Server/.project index 35fde0d41..ec9c6cc2e 100644 --- a/fml/eclipse/FML-Server/.project +++ b/fml/eclipse/FML-Server/.project @@ -15,6 +15,11 @@ org.eclipse.jdt.core.javanature + + build.xml + 1 + /home/cpw/projects/mcworkspace/fmltestbed/FML/build.xml + common 2 diff --git a/fml/patches/minecraft/net/minecraft/client/Minecraft.java.patch b/fml/patches/minecraft/net/minecraft/client/Minecraft.java.patch index 7ac98579b..3dcebf514 100644 --- a/fml/patches/minecraft/net/minecraft/client/Minecraft.java.patch +++ b/fml/patches/minecraft/net/minecraft/client/Minecraft.java.patch @@ -17,3 +17,11 @@ this.field_22008_V = new AnvilSaveConverter(new File(this.field_6297_D, "saves")); this.field_6304_y = new GameSettings(this, this.field_6297_D); this.field_6298_C = new TexturePackList(this, this.field_6297_D); +@@ -330,6 +333,7 @@ + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); ++ FMLClientHandler.instance().onLoadComplete(); + this.func_6250_c("Startup"); + this.field_6286_O = new OpenGlCapsChecker(); + this.field_6301_A.func_340_a(this.field_6304_y); diff --git a/fml/patches/minecraft/net/minecraft/src/TileEntityRenderer.java.patch b/fml/patches/minecraft/net/minecraft/src/TileEntityRenderer.java.patch new file mode 100644 index 000000000..e18a73bf9 --- /dev/null +++ b/fml/patches/minecraft/net/minecraft/src/TileEntityRenderer.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/src/TileEntityRenderer.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src-work/minecraft/net/minecraft/src/TileEntityRenderer.java 0000-00-00 00:00:00.000000000 -0000 +@@ -124,4 +124,8 @@ + { + return this.field_1541_n; + } ++ ++ public static void setTileEntityRenderer(Class tileEntityClass, TileEntitySpecialRenderer renderer) { ++ field_1554_a.field_6517_m.put(tileEntityClass,renderer); ++ } + }