-
Notifications
You must be signed in to change notification settings - Fork 497
/
CraftingUtils.java
82 lines (64 loc) · 2.77 KB
/
CraftingUtils.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
/** Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team http://www.mod-buildcraft.com
* <p/>
* 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.lib.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 final class CraftingUtils {
/** Deactivate constructor */
private CraftingUtils() {}
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 != null && item2 != null && item1.getItem() == item2.getItem() && item1.stackSize == 1 && item2.stackSize == 1
&& item1.getItem().isRepairable()) {
Item itemBase = item1.getItem();
int item1Durability = itemBase.getMaxDamage() - item1.getItemDamage();
int item2Durability = itemBase.getMaxDamage() - item2.getItemDamage();
int repairAmt = item1Durability + item2Durability + itemBase.getMaxDamage() * 5 / 100;
int newDamage = itemBase.getMaxDamage() - repairAmt;
if (newDamage < 0) {
newDamage = 0;
}
List<ItemStack> ingredients = new ArrayList<>(2);
ingredients.add(item1);
ingredients.add(item2);
return new ShapelessRecipes(new ItemStack(item1.getItem(), 1, newDamage), ingredients);
} else if (itemNum > 0) {
// End repair recipe handler
List<IRecipe> recipes = CraftingManager.getInstance().getRecipeList();
for (IRecipe recipe : recipes) {
if (recipe.matches(par1InventoryCrafting, par2World)) {
return recipe;
}
}
return null;
} else {
// No items - no recipe!
return null;
}
}
}