diff --git a/src/net/minecraft/src/CraftGuide_Vanilla.java b/src/net/minecraft/src/CraftGuide_Vanilla.java index dc8842e..21a6c88 100644 --- a/src/net/minecraft/src/CraftGuide_Vanilla.java +++ b/src/net/minecraft/src/CraftGuide_Vanilla.java @@ -24,7 +24,7 @@ public boolean isModLoaded(String name) { if(name.equals("BTW")) { - return isClassLoaded("FCBetterThanWolves"); + return isClassLoaded(getClassPackagePrefix()+"FCBetterThanWolves"); } else if(name.equals("Forge")) { @@ -33,6 +33,22 @@ else if(name.equals("Forge")) return false; } + + private String getClassPackagePrefix() { + try { + if (Class.forName("FCBetterThanWolves") != null) { + return ""; + } + } + catch(Throwable e) {} + try { + if (Class.forName("net.minecraft.src.FCBetterThanWolves") != null) { + return "net.minecraft.src."; + } + } + catch(Throwable e) {} + return ""; + } private boolean isClassLoaded(String classname) { diff --git a/src/uristqwerty/CraftGuide/recipes/BTWRecipes.java b/src/uristqwerty/CraftGuide/recipes/BTWRecipes.java index b831a84..d2585e2 100644 --- a/src/uristqwerty/CraftGuide/recipes/BTWRecipes.java +++ b/src/uristqwerty/CraftGuide/recipes/BTWRecipes.java @@ -5,6 +5,7 @@ import java.util.List; import net.minecraft.src.Block; +import net.minecraft.src.FCAddOnHandler; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraft.src.ShapedRecipes; @@ -29,6 +30,9 @@ public class BTWRecipes extends CraftGuideAPIObject implements RecipeProvider private ItemStack urn; private Class unfiredPotteryClass; private Class endStoneClass; + private Class unfiredBrickClass; + private Class chunkOreIronClass; + private Class chunkOreGoldClass; private Block aestheticOpaque; private Item soap; private Item potash; @@ -43,29 +47,38 @@ public class BTWRecipes extends CraftGuideAPIObject implements RecipeProvider private Object[][][] extraStokedCauldronRecipes; private Object[][][] extraCrucibleRecipes; private Object[][][] extraStokedCrucibleRecipes; + + private String classPackagePrefix = ""; + public BTWRecipes() { + classPackagePrefix = getclassPackagePrefix(); + } + @Override public void generateRecipes(RecipeGenerator generator) { try { - Class btw = Class.forName("FCBetterThanWolves"); + Class btw = Class.forName(classPackagePrefix+"FCBetterThanWolves"); aestheticOpaque = (Block)btw.getField("fcAestheticOpaque").get(null); crucible = new ItemStack((Block)btw.getField("fcCrucible").get(null)); bellows = new ItemStack((Block)btw.getField("fcBellows").get(null)); hibachi = new ItemStack((Block)btw.getField("fcBBQ").get(null)); - soulUrn = new ItemStack((Item)btw.getField("fcSoulUrn").get(null)); - urn = new ItemStack((Item)btw.getField("fcUrn").get(null)); - unfiredPotteryClass = Class.forName("FCBlockUnfiredPottery"); - endStoneClass = Class.forName("FCBlockEndStone"); - - soap = (Item)btw.getField("fcSoap").get(null); - potash = (Item)btw.getField("fcPotash").get(null); - sawDust = (Item)btw.getField("fcSawDust").get(null); - soulDust = (Item)btw.getField("fcSoulDust").get(null); - hellfireDust = (Item)btw.getField("fcHellfireDust").get(null); - groundNetherrack = (Item)btw.getField("fcGroundNetherrack").get(null); - concentratedHellfire = (Item)btw.getField("fcConcentratedHellfire").get(null); + soulUrn = new ItemStack((Item)btw.getField("fcItemSoulUrn").get(null)); + urn = new ItemStack((Item)btw.getField("fcItemUrn").get(null)); + unfiredPotteryClass = Class.forName(classPackagePrefix+"FCBlockUnfiredPottery"); + endStoneClass = Class.forName(classPackagePrefix+"FCBlockEndStone"); + unfiredBrickClass = Class.forName(classPackagePrefix+"FCBlockUnfiredBrick"); + chunkOreIronClass = Class.forName(classPackagePrefix+"FCBlockChunkOreIron"); + chunkOreGoldClass = Class.forName(classPackagePrefix+"FCBlockChunkOreGold"); + + soap = (Item)btw.getField("fcItemSoap").get(null); + potash = (Item)btw.getField("fcItemPotash").get(null); + sawDust = (Item)btw.getField("fcItemSawDust").get(null); + soulDust = (Item)btw.getField("fcItemSoulDust").get(null); + hellfireDust = (Item)btw.getField("fcItemHellfireDust").get(null); + groundNetherrack = (Item)btw.getField("fcItemGroundNetherrack").get(null); + concentratedHellfire = (Item)btw.getField("fcItemConcentratedHellfire").get(null); /* Setting these to null isn't really needed here, but it means that no * extra work is necessary in the future if/when the config settings can @@ -95,24 +108,24 @@ public void generateRecipes(RecipeGenerator generator) } } - Object millstoneRecipes = Class.forName("FCCraftingManagerMillStone").getMethod("getInstance").invoke(null); + Object millstoneRecipes = Class.forName(classPackagePrefix+"FCCraftingManagerMillStone").getMethod("getInstance").invoke(null); ItemStack millstone = new ItemStack((Block)btw.getField("fcMillStone").get(null)); addBulkRecipes(generator, millstoneRecipes, millstone, false, extraMillstoneRecipes); - Object cauldronRecipes = Class.forName("FCCraftingManagerCauldron").getMethod("getInstance").invoke(null); + Object cauldronRecipes = Class.forName(classPackagePrefix+"FCCraftingManagerCauldron").getMethod("getInstance").invoke(null); ItemStack cauldron = new ItemStack((Block)btw.getField("fcCauldron").get(null)); addBulkRecipes(generator, cauldronRecipes, cauldron, false, extraCauldronRecipes); - Object cauldronStokedRecipes = Class.forName("FCCraftingManagerCauldronStoked").getMethod("getInstance").invoke(null); + Object cauldronStokedRecipes = Class.forName(classPackagePrefix+"FCCraftingManagerCauldronStoked").getMethod("getInstance").invoke(null); addBulkRecipes(generator, cauldronStokedRecipes, cauldron, true, extraStokedCauldronRecipes); - Object crucibleRecipes = Class.forName("FCCraftingManagerCrucible").getMethod("getInstance").invoke(null); + Object crucibleRecipes = Class.forName(classPackagePrefix+"FCCraftingManagerCrucible").getMethod("getInstance").invoke(null); addBulkRecipes(generator, crucibleRecipes, crucible, false, extraCrucibleRecipes); - Object crucibleStokedRecipes = Class.forName("FCCraftingManagerCrucibleStoked").getMethod("getInstance").invoke(null); + Object crucibleStokedRecipes = Class.forName(classPackagePrefix+"FCCraftingManagerCrucibleStoked").getMethod("getInstance").invoke(null); addBulkRecipes(generator, crucibleStokedRecipes, crucible, true, extraStokedCrucibleRecipes); - Object anvilRecipes = Class.forName("FCCraftingManagerAnvil").getMethod("getInstance").invoke(null); + Object anvilRecipes = Class.forName(classPackagePrefix+"FCCraftingManagerAnvil").getMethod("getInstance").invoke(null); ItemStack anvil = new ItemStack((Block)btw.getField("fcAnvil").get(null)); addAnvilRecipes(generator, anvilRecipes, anvil); @@ -160,7 +173,7 @@ public void generateRecipes(RecipeGenerator generator) private void addBulkRecipes(RecipeGenerator generator, Object manager, ItemStack block, boolean stoked, Object[][][] extraRecipes) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException { - Field recipes = Class.forName("FCCraftingManagerBulk").getDeclaredField("m_recipes"); + Field recipes = Class.forName(classPackagePrefix+"FCCraftingManagerBulk").getDeclaredField("m_recipes"); recipes.setAccessible(true); List recipeList = (List)recipes.get(manager); @@ -168,8 +181,8 @@ private void addBulkRecipes(RecipeGenerator generator, Object manager, ItemStack for(Object recipe: recipeList) { - List input = (List)Class.forName("FCCraftingManagerBulkRecipe").getMethod("getCraftingIngrediantList").invoke(recipe); - List output = (List)Class.forName("FCCraftingManagerBulkRecipe").getMethod("getCraftingOutputList").invoke(recipe); + List input = (List)Class.forName(classPackagePrefix+"FCCraftingManagerBulkRecipe").getMethod("getCraftingIngrediantList").invoke(recipe); + List output = (List)Class.forName(classPackagePrefix+"FCCraftingManagerBulkRecipe").getMethod("getCraftingOutputList").invoke(recipe); inSize = Math.max(inSize, input.size()); outSize = Math.max(outSize, output.size()); @@ -219,8 +232,8 @@ private void addBulkRecipes(RecipeGenerator generator, Object manager, ItemStack for(Object recipe: recipeList) { - List input = (List)Class.forName("FCCraftingManagerBulkRecipe").getMethod("getCraftingIngrediantList").invoke(recipe); - List output = (List)Class.forName("FCCraftingManagerBulkRecipe").getMethod("getCraftingOutputList").invoke(recipe); + List input = (List)Class.forName(classPackagePrefix+"FCCraftingManagerBulkRecipe").getMethod("getCraftingIngrediantList").invoke(recipe); + List output = (List)Class.forName(classPackagePrefix+"FCCraftingManagerBulkRecipe").getMethod("getCraftingOutputList").invoke(recipe); Object[] recipeContents = new Object[inColumns * 3 + outColumns * 3 + (stoked? 3 : 1)]; @@ -279,7 +292,7 @@ private void addBulkRecipes(RecipeGenerator generator, Object manager, ItemStack private void addAnvilRecipes(RecipeGenerator generator, Object manager, ItemStack anvil) throws SecurityException, NoSuchFieldException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException { - Field recipes = Class.forName("FCCraftingManagerAnvil").getDeclaredField("recipes"); + Field recipes = Class.forName(classPackagePrefix+"FCCraftingManagerAnvil").getDeclaredField("recipes"); recipes.setAccessible(true); List recipeList = (List)recipes.get(manager); @@ -358,7 +371,7 @@ private void addTurntableRecipes(RecipeGenerator generator, ItemStack turntable) }; RecipeTemplate template = generator.createRecipeTemplate(recipeSlots, turntable); - Block unfiredPottery = (Block)Class.forName("FCBetterThanWolves").getField("fcUnfiredPottery").get(null); + Block unfiredPottery = (Block)Class.forName(classPackagePrefix+"FCBetterThanWolves").getField("fcUnfiredPottery").get(null); ItemStack clay = new ItemStack(Item.clay); addTurntableRecipe(generator, template, turntable, new ItemStack(Block.blockClay), new ItemStack(unfiredPottery, 1, 0), clay); @@ -410,19 +423,27 @@ private void addKilnRecipes(RecipeGenerator generator, ItemStack kiln) throws Cl } } + @SuppressWarnings("unchecked") private void addKilnRecipe(RecipeGenerator generator, RecipeTemplate template, ItemStack kiln, Block block) throws IllegalArgumentException, SecurityException, IllegalAccessException, NoSuchFieldException, ClassNotFoundException { if(unfiredPotteryClass.isAssignableFrom(block.getClass())) { - ItemStack planter = new ItemStack((Block)Class.forName("FCBetterThanWolves").getField("fcPlanter").get(null)); - ItemStack vase = new ItemStack((Block)Class.forName("FCBetterThanWolves").getField("fcVase").get(null)); - ItemStack mould = new ItemStack((Item)Class.forName("FCBetterThanWolves").getField("fcItemMould").get(null)); + ItemStack planter = new ItemStack((Block)Class.forName(classPackagePrefix+"FCBetterThanWolves").getField("fcPlanter").get(null)); + ItemStack vase = new ItemStack((Block)Class.forName(classPackagePrefix+"FCBetterThanWolves").getField("fcVase").get(null)); + ItemStack mould = new ItemStack((Item)Class.forName(classPackagePrefix+"FCBetterThanWolves").getField("fcItemMould").get(null)); + ItemStack netherBrick = new ItemStack((Item)Class.forName(classPackagePrefix+"FCBetterThanWolves").getField("fcItemNetherBrick").get(null)); + addKilnRecipe(generator, template, kiln, new ItemStack(block, 1, 0), crucible); addKilnRecipe(generator, template, kiln, new ItemStack(block, 1, 1), planter); addKilnRecipe(generator, template, kiln, new ItemStack(block, 1, 2), vase); addKilnRecipe(generator, template, kiln, new ItemStack(block, 1, 3), urn); addKilnRecipe(generator, template, kiln, new ItemStack(block, 1, 4), mould); + addKilnRecipe(generator, template, kiln, new ItemStack(block, 1, 5), new ItemStack(Item.brick)); + addKilnRecipe(generator, template, kiln, new ItemStack(block, 1, 7), netherBrick); + addKilnRecipe(generator, template, kiln, new ItemStack(block, 1, 9), new ItemStack(Item.cake)); + addKilnRecipe(generator, template, kiln, new ItemStack(block, 1, 12), new ItemStack(Item.pumpkinPie)); + addKilnRecipe(generator, template, kiln, new ItemStack(block, 1, 13), new ItemStack(Item.bread)); } else { @@ -430,15 +451,45 @@ private void addKilnRecipe(RecipeGenerator generator, RecipeTemplate template, I if(endStoneClass.isAssignableFrom(block.getClass())) { - ItemStack output1 = new ItemStack((Item)Class.forName("FCBetterThanWolves").getField("fcItemBrimstone").get(null)); + ItemStack output1 = new ItemStack((Item)Class.forName(classPackagePrefix+"FCBetterThanWolves").getField("fcItemEnderSlag").get(null)); ItemStack output2 = new ItemStack(aestheticOpaque, 1, 10); addKilnRecipe(generator, template, kiln, input, output1, output2); } + else if(unfiredBrickClass.isAssignableFrom(block.getClass())) + { + ItemStack output1 = new ItemStack(Item.brick); + ItemStack output2 = null; + addKilnRecipe(generator, template, kiln, input, output1, output2); + } + else if(chunkOreIronClass.isAssignableFrom(block.getClass())) + { + ItemStack output1 = new ItemStack((Item)Class.forName(classPackagePrefix+"FCBetterThanWolves").getField("fcItemNuggetIron").get(null)); + ItemStack output2 = null; + addKilnRecipe(generator, template, kiln, input, output1, output2); + } + else if(chunkOreGoldClass.isAssignableFrom(block.getClass())) + { + ItemStack output1 = new ItemStack(Item.goldNugget); + ItemStack output2 = null; + addKilnRecipe(generator, template, kiln, input, output1, output2); + } else { int item = (Integer)getPrivateValue(Block.class, block, "m_iItemIndexDroppedWhenCookedByKiln"); int damage = (Integer)getPrivateValue(Block.class, block, "m_iItemDamageDroppedWhenCookedByKiln"); - addKilnRecipe(generator, template, kiln, input, new ItemStack(item, 1, damage)); + + if (item != -1) { + addKilnRecipe(generator, template, kiln, input, new ItemStack(item, 1, damage)); + } + else { + try { + item = block.GetItemIndexDroppedWhenCookedByKiln(null,0,0,0); + addKilnRecipe(generator, template, kiln, input, new ItemStack(item, 1, 0)); + } + catch (Exception e) { + FCAddOnHandler.LogMessage("There is an error on a kiln recipe. Please leave a report about it on http://www.sargunster.com/btwforum/viewtopic.php?f=12&t=9452 so it can be fixed."); + } + } } } } @@ -472,7 +523,7 @@ private void addHopperRecipes(RecipeGenerator generator, ItemStack hopper) throw RecipeTemplate template = generator.createRecipeTemplate(recipeSlots, hopper); ItemStack groundNetherrackStack = new ItemStack(groundNetherrack, 8); ItemStack hellfireDustStack = new ItemStack(hellfireDust, 8); - ItemStack wicker = new ItemStack((Item)Class.forName("FCBetterThanWolves").getField("fcWicker").get(null)); + ItemStack wicker = new ItemStack((Block)Class.forName(classPackagePrefix+"FCBetterThanWolves").getField("fcBlockWickerPane").get(null)); ItemStack slowsand = new ItemStack(Block.slowSand); ItemStack soulDustStack = new ItemStack(soulDust, 8); ItemStack sawDustStack = new ItemStack(sawDust, 8); @@ -502,18 +553,18 @@ private void addSawRecipes(RecipeGenerator generator, ItemStack saw) throws Ille RecipeTemplate template = generator.createRecipeTemplate(recipeSlots, saw); - ItemStack bloodWood = new ItemStack((Block)Class.forName("FCBetterThanWolves").getField("fcBloodWood").get(null)); - ItemStack gears = new ItemStack((Item)Class.forName("FCBetterThanWolves").getField("fcGear").get(null)); + ItemStack bloodWood = new ItemStack((Block)Class.forName(classPackagePrefix+"FCBetterThanWolves").getField("fcBloodWood").get(null)); + ItemStack gears = new ItemStack((Item)Class.forName(classPackagePrefix+"FCBetterThanWolves").getField("fcItemGear").get(null)); ItemStack soulDustStack = new ItemStack(soulDust, 2); ItemStack sawDustStack = new ItemStack(sawDust, 2); gears.stackSize = 2; - Block aestheticNonOpaque = (Block)Class.forName("FCBetterThanWolves").getField("fcAestheticNonOpaque").get(null); - Block companionCube = (Block)Class.forName("FCBetterThanWolves").getField("fcCompanionCube").get(null); + Block aestheticNonOpaque = (Block)Class.forName(classPackagePrefix+"FCBetterThanWolves").getField("fcAestheticNonOpaque").get(null); + Block companionCube = (Block)Class.forName(classPackagePrefix+"FCBetterThanWolves").getField("fcCompanionCube").get(null); - int mouldingID = (Integer)Class.forName("FCBetterThanWolves").getField("fcBlockWoodMouldingItemStubID").get(null); - int sidingID = (Integer)Class.forName("FCBetterThanWolves").getField("fcBlockWoodSidingItemStubID").get(null); - int cornerID = (Integer)Class.forName("FCBetterThanWolves").getField("fcBlockWoodCornerItemStubID").get(null); + int mouldingID = (Integer)Class.forName(classPackagePrefix+"FCBetterThanWolves").getField("fcBlockWoodMouldingItemStubID").get(null); + int sidingID = (Integer)Class.forName(classPackagePrefix+"FCBetterThanWolves").getField("fcBlockWoodSidingItemStubID").get(null); + int cornerID = (Integer)Class.forName(classPackagePrefix+"FCBetterThanWolves").getField("fcBlockWoodCornerItemStubID").get(null); addSawRecipe(generator, template, saw, bloodWood, new ItemStack(Block.planks, 4, 3), soulDustStack); @@ -713,4 +764,27 @@ private Object[][] addLapisRecoveryRecipeB(int inColor, int outColor1, int outCo }; } } + + private String getclassPackagePrefix() { + try { + if (Class.forName("FCBetterThanWolves") != null) { + System.out.println("Returning empty"); + return ""; + } + } + catch(Throwable e) { + System.out.println(e); + } + try { + if (Class.forName("net.minecraft.src.FCBetterThanWolves") != null) { + System.out.println("Returning net.minecraft.src."); + return "net.minecraft.src."; + } + } + catch(Throwable e) { + System.out.println(e); + } + System.out.println("Returning empty (catch)"); + return ""; + } } diff --git a/src/uristqwerty/CraftGuide/recipes/DefaultRecipeProvider.java b/src/uristqwerty/CraftGuide/recipes/DefaultRecipeProvider.java index d0dcab2..4bd4f95 100644 --- a/src/uristqwerty/CraftGuide/recipes/DefaultRecipeProvider.java +++ b/src/uristqwerty/CraftGuide/recipes/DefaultRecipeProvider.java @@ -283,7 +283,7 @@ public String getInfo(ItemStack itemStack) } else if(itemStack.hasTagCompound()) { - fuel = TileEntityFurnace.getItemBurnTime(itemStack); + fuel = (itemStack == null) ? 0 : itemStack.getItem().GetFurnaceBurnTime(itemStack.getItemDamage()) * 2; } else { @@ -330,10 +330,10 @@ private static int getCachedBurnTime(ItemStack stack) if(value == null) { - value = TileEntityFurnace.getItemBurnTime(stack); + value = (stack == null) ? 0 : stack.getItem().GetFurnaceBurnTime(stack.getItemDamage()) * 2; burnCache.put(lookup, value); } return value; } -} +} \ No newline at end of file