-
Notifications
You must be signed in to change notification settings - Fork 755
/
ModRedstone.java
139 lines (121 loc) · 4.4 KB
/
ModRedstone.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package tconstruct.modifiers.tools;
import java.util.Arrays;
import java.util.List;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import tconstruct.library.tools.ToolCore;
public class ModRedstone extends ItemModTypeFilter
{
String tooltipName;
int max = 50;
public ModRedstone(int effect, ItemStack[] items, int[] values)
{
super(effect, "Redstone", items, values);
tooltipName = "\u00a74Haste";
}
@Override
protected boolean canModify (ItemStack tool, ItemStack[] input)
{
if (tool.getItem() instanceof ToolCore)
{
ToolCore toolItem = (ToolCore) tool.getItem();
if (!validType(toolItem))
return false;
if(matchingAmount(input) > max)
return false;
NBTTagCompound tags = tool.getTagCompound().getCompoundTag("InfiTool");
if (!tags.hasKey(key))
return tags.getInteger("Modifiers") > 0 && matchingAmount(input) <= max;
int keyPair[] = tags.getIntArray(key);
if (keyPair[0] + matchingAmount(input) <= keyPair[1])
return true;
else if (keyPair[0] == keyPair[1])
return tags.getInteger("Modifiers") > 0;
}
return false;
}
@Override
public void modify (ItemStack[] input, ItemStack tool)
{
NBTTagCompound tags = tool.getTagCompound().getCompoundTag("InfiTool");
int[] keyPair;
int increase = matchingAmount(input);
int current = 0;
if (tags.hasKey(key))
{
keyPair = tags.getIntArray(key);
if (keyPair[0] % max == 0)
{
keyPair[0] += increase;
keyPair[1] += max;
tags.setIntArray(key, keyPair);
int modifiers = tags.getInteger("Modifiers");
modifiers -= 1;
tags.setInteger("Modifiers", modifiers);
}
else
{
keyPair[0] += increase;
tags.setIntArray(key, keyPair);
}
current = keyPair[0];
updateModTag(tool, keyPair);
}
else
{
int modifiers = tags.getInteger("Modifiers");
modifiers -= 1;
tags.setInteger("Modifiers", modifiers);
String modName = "\u00a74Redstone (" + increase + "/" + max + ")";
int tooltipIndex = addToolTip(tool, tooltipName, modName);
keyPair = new int[] { increase, max, tooltipIndex };
current = keyPair[0];
tags.setIntArray(key, keyPair);
}
int miningSpeed = tags.getInteger("MiningSpeed");
int boost = 8 + ((current - 1) / 50 * 2);
Item temp = tool.getItem();
if (temp instanceof ToolCore)
{
ToolCore toolcore = (ToolCore) temp;
if (toolcore.durabilityTypeHandle() == 2)
boost += 2;
if (toolcore.durabilityTypeAccessory() == 2)
boost += 2;
if (toolcore.durabilityTypeExtra() == 2)
boost += 2;
}
System.out.println("Boost: "+boost);
miningSpeed += (increase * boost);
tags.setInteger("MiningSpeed", miningSpeed);
String[] type = { "MiningSpeed2", "MiningSpeedHandle", "MiningSpeedExtra" };
for (int i = 0; i < 3; i++)
{
if (tags.hasKey(type[i]))
{
int speed = tags.getInteger(type[i]);
speed += (increase * boost);
tags.setInteger(type[i], speed);
}
}
if (tags.hasKey("DrawSpeed"))
{
int baseDrawSpeed = tags.getInteger("BaseDrawSpeed");
int drawSpeed = (int) (baseDrawSpeed - (0.1f * baseDrawSpeed * (keyPair[0] / 50f)));
tags.setInteger("DrawSpeed", drawSpeed);
}
}
void updateModTag (ItemStack tool, int[] keys)
{
NBTTagCompound tags = tool.getTagCompound().getCompoundTag("InfiTool");
String tip = "ModifierTip" + keys[2];
String modName = "\u00a74Redstone (" + keys[0] + "/" + keys[1] + ")";
tags.setString(tip, modName);
}
public boolean validType (ToolCore tool)
{
List list = Arrays.asList(tool.getTraits());
return list.contains("harvest") || list.contains("utility") || list.contains("bow");
}
}