diff --git a/src/main/java/net/minecraft/item/crafting/FurnaceRecipes.java b/src/main/java/net/minecraft/item/crafting/FurnaceRecipes.java index 2dc87e1..8d54f65 100644 --- a/src/main/java/net/minecraft/item/crafting/FurnaceRecipes.java +++ b/src/main/java/net/minecraft/item/crafting/FurnaceRecipes.java @@ -1,9 +1,13 @@ package net.minecraft.item.crafting; +import gnu.trove.map.TIntObjectMap; +import gnu.trove.map.hash.TIntObjectHashMap; + import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; + import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -14,8 +18,18 @@ public class FurnaceRecipes { private static final FurnaceRecipes smeltingBase = new FurnaceRecipes(); - private Map smeltingList = new HashMap(); + private Map smeltingList = new HashMap() + { + public Object put(Object o1, Object o2) + { + ItemStack input = (ItemStack) o1; + ItemStack output = (ItemStack) o2; + fastMap.put((Item.getIdFromItem(input.getItem()) << 16) | (input.getItemDamage() & 0xFFFF), output); + return super.put(o1, o2); + } + }; private Map experienceList = new HashMap(); + private TIntObjectMap fastMap = new TIntObjectHashMap(); private static final String __OBFID = "CL_00000085"; public static FurnaceRecipes smelting() @@ -78,6 +92,12 @@ public ItemStack getSmeltingResult(ItemStack p_151395_1_) { + int idPart = Item.getIdFromItem(p_151395_1_.getItem()) << 16; + ItemStack ret = fastMap.get(idPart | (p_151395_1_.getItemDamage() & 0xFFFF)); + if(ret == null) + ret = fastMap.get(idPart | 32767); + return ret; + /* Iterator iterator = this.smeltingList.entrySet().iterator(); Entry entry; @@ -93,6 +113,7 @@ while (!this.func_151397_a(p_151395_1_, (ItemStack)entry.getKey())); return (ItemStack)entry.getValue(); + */ } private boolean func_151397_a(ItemStack p_151397_1_, ItemStack p_151397_2_) @@ -126,4 +147,14 @@ return ((Float)entry.getValue()).floatValue(); } + + public void remap() + { + Map map = (Map)smeltingList; + for(Entry ent : map.entrySet()) + { + ItemStack input = ent.getKey(); + fastMap.put((Item.getIdFromItem(input.getItem()) << 16) | (input.getItemDamage() & 0xFFFF), ent.getValue()); + } + } } \ No newline at end of file diff --git a/src/main/java/org/ultramine/server/UltramineServerModContainer.java b/src/main/java/org/ultramine/server/UltramineServerModContainer.java index 2002b44..3da731f 100644 --- a/src/main/java/org/ultramine/server/UltramineServerModContainer.java +++ b/src/main/java/org/ultramine/server/UltramineServerModContainer.java @@ -5,6 +5,7 @@ import java.util.Map; import net.minecraft.command.CommandHandler; +import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.server.MinecraftServer; import net.minecraftforge.common.MinecraftForge; @@ -18,6 +19,7 @@ import cpw.mods.fml.common.ModMetadata; import cpw.mods.fml.common.event.FMLConstructionEvent; import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLModIdMappingEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.event.FMLServerAboutToStartEvent; @@ -144,6 +146,12 @@ buttonCommand.unload(); } + @Subscribe + public void remap(FMLModIdMappingEvent e) + { + FurnaceRecipes.smelting().remap(); + } + @NetworkCheckHandler public boolean networkCheck(Map map, Side side) {