-
Notifications
You must be signed in to change notification settings - Fork 497
/
CraftingHelper.java
88 lines (75 loc) · 2.83 KB
/
CraftingHelper.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/**
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
*
* BuildCraft is distributed under the terms of the Minecraft Mod Public
* License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt
*/
package buildcraft.core.utils;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.ShapelessRecipes;
import net.minecraft.world.World;
public class CraftingHelper {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static IRecipe findMatchingRecipe(InventoryCrafting par1InventoryCrafting, World par2World)
{
// Begin repair recipe handler
int itemNum = 0;
ItemStack item1 = null;
ItemStack item2 = null;
int slot;
for (slot = 0; slot < par1InventoryCrafting.getSizeInventory(); ++slot)
{
ItemStack itemInSlot = par1InventoryCrafting.getStackInSlot(slot);
if (itemInSlot != null)
{
if (itemNum == 0)
{
item1 = itemInSlot;
}
if (itemNum == 1)
{
item2 = itemInSlot;
}
++itemNum;
}
}
if (itemNum == 2 && item1.getItem() == item2.getItem() && item1.stackSize == 1 && item2.stackSize == 1 && item1.getItem().isRepairable())
{
Item itemBase = item1.getItem();
int item1Durability = itemBase.getMaxDamage() - item1.getItemDamageForDisplay();
int item2Durability = itemBase.getMaxDamage() - item2.getItemDamageForDisplay();
int repairAmt = item1Durability + item2Durability + itemBase.getMaxDamage() * 5 / 100;
int newDamage = itemBase.getMaxDamage() - repairAmt;
if (newDamage < 0)
{
newDamage = 0;
}
ArrayList ingredients = new ArrayList<ItemStack>(2);
ingredients.add(item1);
ingredients.add(item2);
return new ShapelessRecipes(new ItemStack(item1.getItem(), 1, newDamage),ingredients);
}
// End repair recipe handler
else
{
List recipes = CraftingManager.getInstance().getRecipeList();
for (int index = 0; index < recipes.size(); ++index)
{
IRecipe currentRecipe = (IRecipe) recipes.get(index);
if (currentRecipe.matches(par1InventoryCrafting, par2World))
{
return currentRecipe;
}
}
return null;
}
}
}