diff --git a/fml/common/cpw/mods/fml/common/FMLCommonHandler.java b/fml/common/cpw/mods/fml/common/FMLCommonHandler.java index eedb829bb..ed56e1bf6 100644 --- a/fml/common/cpw/mods/fml/common/FMLCommonHandler.java +++ b/fml/common/cpw/mods/fml/common/FMLCommonHandler.java @@ -31,21 +31,13 @@ public class FMLCommonHandler private Map modChannels = new HashMap(); private Map> activeChannels = new HashMap>(); private IFMLSidedHandler sidedDelegate; - - private FMLCommonHandler() { - try { - Class.forName("net.minecraft.client.Minecraft"); - sidedDelegate=(IFMLSidedHandler) Class.forName("cpw.mods.fml.client.FMLClientHandler").newInstance(); - } catch (Exception ex) { - try { - sidedDelegate=(IFMLSidedHandler) Class.forName("cpw.mods.fml.server.FMLServerHandler").newInstance(); - } catch (Exception ex2) { - Loader.log.severe("A severe installation issue has occured with FML, we cannot continue"); - throw new LoaderException(ex2); - } - } + + + public void registerSidedDelegate(IFMLSidedHandler handler) + { + sidedDelegate = handler; } - + public void gameTickStart() { for (ModContainer mod : Loader.getModList()) @@ -167,12 +159,14 @@ public class FMLCommonHandler { return activeChannels.get(player).contains(channel); } - - public Logger getFMLLogger() { + + public Logger getFMLLogger() + { return Loader.log; } - - public Logger getMinecraftLogger() { + + public Logger getMinecraftLogger() + { return sidedDelegate.getMinecraftLogger(); } diff --git a/fml/common/net/minecraft/src/CommonRegistry.java b/fml/common/net/minecraft/src/CommonRegistry.java index 652a85583..de29cfa1d 100644 --- a/fml/common/net/minecraft/src/CommonRegistry.java +++ b/fml/common/net/minecraft/src/CommonRegistry.java @@ -13,131 +13,90 @@ */ package net.minecraft.src; -import java.util.Collections; -import java.util.List; public class CommonRegistry { + private static IMinecraftRegistry instance; + + public static void registerRegistry(IMinecraftRegistry registry) + { + if (instance != null) + { + throw new RuntimeException("Illegal attempt to replace FML registry"); + } + + instance = registry; + } public static void addRecipe(ItemStack output, Object... params) { - CraftingManager.func_20151_a().func_20153_a(output, params); + instance.addRecipe(output, params); } public static void addShapelessRecipe(ItemStack output, Object... params) { - CraftingManager.func_20151_a().func_21146_b(output, params); + instance.addShapelessRecipe(output, params); } public static void addSmelting(int input, ItemStack output) { - FurnaceRecipes.func_21162_a().func_21160_a(input, output); + instance.addSmelting(input, output); } public static void registerBlock(Block block) { - registerBlock(block, ItemBlock.class); + instance.registerBlock(block); } public static void registerBlock(Block block, Class itemclass) { - try - { - assert block != null : "registerBlock: block cannot be null"; - assert itemclass != null : "registerBlock: itemclass cannot be null"; - int blockItemId = block.field_573_bc - 256; - itemclass.getConstructor(int.class).newInstance(blockItemId); - } - catch (Exception e) - { - //HMMM - } + instance.registerBlock(block, itemclass); } public static void registerEntityID(Class entityClass, String entityName, int id) { - EntityList.addNewEntityListMapping(entityClass, entityName, id); + instance.registerEntityID(entityClass, entityName, id); } public static void registerEntityID(Class entityClass, String entityName, int id, int backgroundEggColour, int foregroundEggColour) { - EntityList.addNewEntityListMapping(entityClass, entityName, id, backgroundEggColour, foregroundEggColour); + instance.registerEntityID(entityClass, entityName, id, backgroundEggColour, foregroundEggColour); } public static void registerTileEntity(Class tileEntityClass, String id) { - TileEntity.addNewTileEntityMapping(tileEntityClass, id); + instance.registerTileEntity(tileEntityClass, id); } public static void addBiome(BiomeGenBase biome) { - //NOOP because the implementation idea is broken. Creating a BiomeGenBase adds the biome already. + instance.addBiome(biome); } public static void addSpawn(Class entityClass, int weightedProb, int min, int max, EnumCreatureType typeOfCreature, BiomeGenBase... biomes) { - for (BiomeGenBase biome : biomes) - { - @SuppressWarnings("unchecked") - List spawns = biome.func_25055_a(typeOfCreature); - - for (SpawnListEntry entry : spawns) - { - //Adjusting an existing spawn entry - if (entry.field_25145_a == entityClass) - { - entry.field_35483_d = weightedProb; - entry.field_35484_b = min; - entry.field_35485_c = max; - break; - } - } - - spawns.add(new SpawnListEntry(entityClass, weightedProb, min, max)); - } + instance.addSpawn(entityClass, weightedProb, min, max, typeOfCreature, biomes); } @SuppressWarnings("unchecked") public static void addSpawn(String entityName, int weightedProb, int min, int max, EnumCreatureType spawnList, BiomeGenBase... biomes) { - Class entityClazz = EntityList.getEntityToClassMapping().get(entityName); - - if (EntityLiving.class.isAssignableFrom(entityClazz)) - { - addSpawn((Class ) entityClazz, weightedProb, min, max, spawnList, biomes); - } + instance.addSpawn(entityName, weightedProb, min, max, spawnList, biomes); } public static void removeBiome(BiomeGenBase biome) { - // NOOP because broken + instance.removeBiome(biome); } public static void removeSpawn(Class entityClass, EnumCreatureType typeOfCreature, BiomeGenBase... biomes) { - for (BiomeGenBase biome : biomes) - { - @SuppressWarnings("unchecked") - List spawns = biome.func_25055_a(typeOfCreature); - - for (SpawnListEntry entry : Collections.unmodifiableList(spawns)) - { - if (entry.field_25145_a == entityClass) - { - spawns.remove(entry); - } - } - } + instance.removeSpawn(entityClass, typeOfCreature, biomes); } @SuppressWarnings("unchecked") public static void removeSpawn(String entityName, EnumCreatureType spawnList, BiomeGenBase... biomes) { - Class entityClazz = EntityList.getEntityToClassMapping().get(entityName); - - if (EntityLiving.class.isAssignableFrom(entityClazz)) - { - removeSpawn((Class ) entityClazz, spawnList, biomes); - } + instance.removeSpawn(entityName, spawnList, biomes); } } diff --git a/fml/common/net/minecraft/src/IMinecraftRegistry.java b/fml/common/net/minecraft/src/IMinecraftRegistry.java new file mode 100644 index 000000000..cc17c0465 --- /dev/null +++ b/fml/common/net/minecraft/src/IMinecraftRegistry.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +public interface IMinecraftRegistry +{ + + public abstract void removeSpawn(String entityName, EnumCreatureType spawnList, BiomeGenBase... biomes); + + public abstract void removeSpawn(Class entityClass, EnumCreatureType typeOfCreature, BiomeGenBase... biomes); + + public abstract void removeBiome(BiomeGenBase biome); + + public abstract void addSpawn(String entityName, int weightedProb, int min, int max, EnumCreatureType spawnList, BiomeGenBase... biomes); + + public abstract void addSpawn(Class entityClass, int weightedProb, int min, int max, EnumCreatureType typeOfCreature, BiomeGenBase... biomes); + + public abstract void addBiome(BiomeGenBase biome); + + public abstract void registerTileEntity(Class tileEntityClass, String id); + + public abstract void registerEntityID(Class entityClass, String entityName, int id, int backgroundEggColour, int foregroundEggColour); + + public abstract void registerEntityID(Class entityClass, String entityName, int id); + + public abstract void registerBlock(Block block, Class itemclass); + + public abstract void registerBlock(Block block); + + public abstract void addSmelting(int input, ItemStack output); + + public abstract void addShapelessRecipe(ItemStack output, Object... params); + + public abstract void addRecipe(ItemStack output, Object... params); + +} \ No newline at end of file diff --git a/fml/eclipse/.metadata/.plugins/org.eclipse.core.resources/.snap b/fml/eclipse/.metadata/.plugins/org.eclipse.core.resources/.snap index e3ccec7a4..528faa982 100644 Binary files a/fml/eclipse/.metadata/.plugins/org.eclipse.core.resources/.snap and b/fml/eclipse/.metadata/.plugins/org.eclipse.core.resources/.snap differ diff --git a/fml/server/cpw/mods/fml/server/FMLServerHandler.java b/fml/server/cpw/mods/fml/server/FMLServerHandler.java index 6a16c2789..a249b73d4 100644 --- a/fml/server/cpw/mods/fml/server/FMLServerHandler.java +++ b/fml/server/cpw/mods/fml/server/FMLServerHandler.java @@ -20,6 +20,7 @@ import java.util.logging.Logger; import net.minecraft.server.MinecraftServer; import net.minecraft.src.BaseMod; import net.minecraft.src.BiomeGenBase; +import net.minecraft.src.CommonRegistry; import net.minecraft.src.EntityItem; import net.minecraft.src.EntityPlayer; import net.minecraft.src.IChunkProvider; @@ -29,6 +30,7 @@ import net.minecraft.src.NetworkManager; import net.minecraft.src.Packet1Login; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.Packet3Chat; +import net.minecraft.src.ServerRegistry; import net.minecraft.src.World; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.IFMLSidedHandler; @@ -46,6 +48,8 @@ public class FMLServerHandler implements IFMLSidedHandler public void onPreLoad(MinecraftServer minecraftServer) { server = minecraftServer; + FMLCommonHandler.instance().registerSidedDelegate(this); + CommonRegistry.registerRegistry(new ServerRegistry()); Loader.instance().loadMods(); } diff --git a/fml/server/net/minecraft/src/ServerRegistry.java b/fml/server/net/minecraft/src/ServerRegistry.java new file mode 100644 index 000000000..8f0afc370 --- /dev/null +++ b/fml/server/net/minecraft/src/ServerRegistry.java @@ -0,0 +1,145 @@ +package net.minecraft.src; + +import java.util.Collections; +import java.util.List; + +public class ServerRegistry implements IMinecraftRegistry +{ + + @Override + public void addRecipe(ItemStack output, Object... params) + { + CraftingManager.func_20151_a().func_20153_a(output, params); + } + + @Override + public void addShapelessRecipe(ItemStack output, Object... params) + { + CraftingManager.func_20151_a().func_21146_b(output, params); + } + + @Override + public void addSmelting(int input, ItemStack output) + { + FurnaceRecipes.func_21162_a().func_21160_a(input, output); + } + + @Override + public void registerBlock(Block block) + { + registerBlock(block, ItemBlock.class); + } + + @Override + public void registerBlock(Block block, Class itemclass) + { + try + { + assert block != null : "registerBlock: block cannot be null"; + assert itemclass != null : "registerBlock: itemclass cannot be null"; + int blockItemId = block.field_573_bc - 256; + itemclass.getConstructor(int.class).newInstance(blockItemId); + } + catch (Exception e) + { + //HMMM + } + } + + @Override + public void registerEntityID(Class entityClass, String entityName, int id) + { + EntityList.addNewEntityListMapping(entityClass, entityName, id); + } + + @Override + public void registerEntityID(Class entityClass, String entityName, int id, int backgroundEggColour, int foregroundEggColour) + { + EntityList.addNewEntityListMapping(entityClass, entityName, id, backgroundEggColour, foregroundEggColour); + } + + @Override + public void registerTileEntity(Class tileEntityClass, String id) + { + TileEntity.addNewTileEntityMapping(tileEntityClass, id); + } + + @Override + public void addBiome(BiomeGenBase biome) + { + //NOOP because the implementation idea is broken. Creating a BiomeGenBase adds the biome already. + } + + @Override + public void addSpawn(Class entityClass, int weightedProb, int min, int max, EnumCreatureType typeOfCreature, BiomeGenBase... biomes) + { + for (BiomeGenBase biome : biomes) + { + @SuppressWarnings("unchecked") + List spawns = biome.func_25055_a(typeOfCreature); + + for (SpawnListEntry entry : spawns) + { + //Adjusting an existing spawn entry + if (entry.field_25145_a == entityClass) + { + entry.field_35483_d = weightedProb; + entry.field_35484_b = min; + entry.field_35485_c = max; + break; + } + } + + spawns.add(new SpawnListEntry(entityClass, weightedProb, min, max)); + } + } + + @Override + @SuppressWarnings("unchecked") + public void addSpawn(String entityName, int weightedProb, int min, int max, EnumCreatureType spawnList, BiomeGenBase... biomes) + { + Class entityClazz = EntityList.getEntityToClassMapping().get(entityName); + + if (EntityLiving.class.isAssignableFrom(entityClazz)) + { + addSpawn((Class ) entityClazz, weightedProb, min, max, spawnList, biomes); + } + } + + @Override + public void removeBiome(BiomeGenBase biome) + { + // NOOP because broken + } + + @Override + public void removeSpawn(Class entityClass, EnumCreatureType typeOfCreature, BiomeGenBase... biomes) + { + for (BiomeGenBase biome : biomes) + { + @SuppressWarnings("unchecked") + List spawns = biome.func_25055_a(typeOfCreature); + + for (SpawnListEntry entry : Collections.unmodifiableList(spawns)) + { + if (entry.field_25145_a == entityClass) + { + spawns.remove(entry); + } + } + } + } + + @Override + @SuppressWarnings("unchecked") + public void removeSpawn(String entityName, EnumCreatureType spawnList, BiomeGenBase... biomes) + { + Class entityClazz = EntityList.getEntityToClassMapping().get(entityName); + + if (EntityLiving.class.isAssignableFrom(entityClazz)) + { + removeSpawn((Class ) entityClazz, spawnList, biomes); + } + } + +}