Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion src/net/minecraft/src/CraftGuide_Vanilla.java
Original file line number Diff line number Diff line change
Expand Up @@ -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"))
{
Expand All @@ -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)
{
Expand Down
152 changes: 113 additions & 39 deletions src/uristqwerty/CraftGuide/recipes/BTWRecipes.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -160,16 +173,16 @@ 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);

int inSize = 0, outSize = 0;

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());
Expand Down Expand Up @@ -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)];

Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -410,35 +423,73 @@ 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
{
ItemStack input = new ItemStack(block);

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.");
}
}
}
}
}
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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 "";
}
}
6 changes: 3 additions & 3 deletions src/uristqwerty/CraftGuide/recipes/DefaultRecipeProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down Expand Up @@ -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;
}
}
}