Skip to content

Commit 87f8cf4

Browse files
committed
Fixed a bug, now can automatically complete any forging recipes
1 parent 6dca758 commit 87f8cf4

File tree

4 files changed

+66
-55
lines changed

4 files changed

+66
-55
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
org.gradle.jvmargs=-Xmx3G
44
org.gradle.daemon=false
55
mc_version=1.12.2
6-
mod_version=1.0
6+
mod_version=1.1

src/main/java/com/eternal130/tfcaf/TFCAutoForging.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class TFCAutoForging
1515
{
1616
public static final String MODID = "tfcaf";
1717
public static final String NAME = "TFC Auto Forging";
18-
public static final String VERSION = "1.0";
18+
public static final String VERSION = "1.1";
1919
public static short timer = 0;
2020

2121
public static Logger logger;

src/main/java/com/eternal130/tfcaf/eventLoader/mcEvent.java

Lines changed: 63 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import java.lang.reflect.Field;
77
import java.lang.reflect.Method;
8+
import java.util.Arrays;
89
import java.util.List;
910

1011
import com.eternal130.tfcaf.KeyBind;
@@ -54,7 +55,7 @@ public void operationHighlight(GuiScreenEvent.DrawScreenEvent.Post event) {
5455
// for(Field field : fields) {
5556
// TFCAutoForging.logger.info("Field: {} ,Type: {}", field.getName(), field.getType());
5657
// }
57-
// 检测当前gui是否是铁砧gui或者是tfcquickpocket替换后的铁砧gui
58+
// 检测当前gui是否是砧gui
5859
TEAnvilTFC anvilTE = getTEAnvilTFC((GuiAnvilTFC) event.getGui());
5960
if (enableAutoForging || enableForgingTip) {
6061
// 当锻造提示功能和自动锻造功能有一个开启时就计算下一步锻造步骤
@@ -73,58 +74,8 @@ public void operationHighlight(GuiScreenEvent.DrawScreenEvent.Post event) {
7374
// 下面那个变量内存有最后三步,LinkedList类型,队列数据结构,最多3个元素,从左到右分别为倒数第三步,倒数第二步,倒数第一步
7475
ForgeSteps steps = anvilTE.getSteps();
7576
// 用于存储锻造要求,其中的值为Util类中operations的索引
76-
int[] lastOperations = new int[3];
77+
int[] lastOperations = getRules(AnvilRecipe.getRules());
7778
for (int i = 0; i < 3; i++) {
78-
try {
79-
lastOperations[i] = Util.operationsTfc.get(ForgeRule.getID(AnvilRecipe.getRules()[i]));
80-
} catch (Exception e) {
81-
//这里的异常是索引越界异常,因为锻造需求相比于1.7,没有any,长度可以小于3
82-
lastOperations[i] = 4;
83-
}
84-
// switch (ForgeRule.getID(AnvilRecipe.getRules()[i])) {
85-
// case 0:
86-
// case 1:
87-
// case 2:
88-
// case 3:
89-
// case 4:
90-
// lastOperations[i] = 3;
91-
// break;
92-
// case 5:
93-
// case 6:
94-
// case 7:
95-
// case 8:
96-
// case 9:
97-
// lastOperations[i] = 0;
98-
// break;
99-
// case 10:
100-
// case 11:
101-
// case 12:
102-
// case 13:
103-
// case 14:
104-
// lastOperations[i] = 4;
105-
// break;
106-
// case 15:
107-
// case 16:
108-
// case 17:
109-
// case 18:
110-
// case 19:
111-
// lastOperations[i] = 5;
112-
// break;
113-
// case 20:
114-
// case 21:
115-
// case 22:
116-
// case 23:
117-
// case 24:
118-
// lastOperations[i] = 6;
119-
// break;
120-
// case 25:
121-
// case 26:
122-
// case 27:
123-
// case 28:
124-
// case 29:
125-
// lastOperations[i] = 7;
126-
// break;
127-
// }
12879
ruleOffset += Util.operations[lastOperations[i]];
12980
}
13081
// GuiAnvil中drawItemRulesImages方法绘制最后三步步骤,drawRulesImages方法绘制锻造要求
@@ -320,4 +271,64 @@ private TEAnvilTFC getTEAnvilTFC(GuiAnvilTFC gui) throws NoSuchFieldException, I
320271
fields.setAccessible(true);
321272
return (TEAnvilTFC) fields.get(gui);
322273
}
274+
private int[] getRules(ForgeRule[] rules) {
275+
// 相对于1.7版本,没有any类型,每种步骤也只有五种位置,少了LastTwo这种类型,因此少遍历一次
276+
int[] lastOperations = new int[3];
277+
// 将锻造要求初始化为-1,表示没有要求
278+
Arrays.fill(lastOperations, -1);
279+
// 标志该位置要求是否已经被填充
280+
boolean[] flag = new boolean[3];
281+
// 首先遍历一次锻造目标,将确定位置的步骤填充到lastOperations中,例如Hit_Last,Hit_Second_Last,Hit_Third_Last
282+
// 因为hit的last和notlast相比于其他步骤是反序的,因此单独摘出来判断
283+
for (ForgeRule rule : rules) {
284+
// 这三种序号对5取余后分别是1,3,4,Hit_Last的序号是2,Hit_Not_Last的序号是1,单独摘出来判断
285+
if ((rule.ordinal() != 1 && rule.ordinal() % 5 == 1 && !flag[0]) || rule.ordinal() == 2) {
286+
lastOperations[0] = Util.operationsTfc.get(rule.ordinal());
287+
flag[0] = true;
288+
} else if (rule.ordinal() % 5 == 3 && !flag[1]) {
289+
lastOperations[1] = Util.operationsTfc.get(rule.ordinal());
290+
flag[1] = true;
291+
} else if (rule.ordinal() % 5 == 4 && !flag[2]) {
292+
lastOperations[2] = Util.operationsTfc.get(rule.ordinal());
293+
flag[2] = true;
294+
}
295+
}
296+
// 第二次遍历,填充可以位于倒数第二步和倒数第三步的步骤,例如Hit_Not_Last
297+
// 其他步骤的Not_last序号对5取余后是2,Hit_Not_Last的序号是1,因此单独摘出来判断
298+
for (ForgeRule rule : rules) {
299+
// 这一步的序号对5取余后是2
300+
if ((rule.ordinal() != 2 && rule.ordinal() % 5 == 2) || rule.ordinal() == 1){
301+
// 如果倒数第三步已经填充,说明倒数第三步是已经定死的步骤,不可以更改,如果能进入这里的循环并且两个位置都已经填满,说明该锻造配方无法完成
302+
// 所以当倒数第三步已经填充,就将倒数第二步填充为当前步骤,否则填充最后一步
303+
if (flag[2]) {
304+
lastOperations[1] = Util.operationsTfc.get(rule.ordinal());
305+
flag[1] = true;
306+
} else {
307+
lastOperations[2] = Util.operationsTfc.get(rule.ordinal());
308+
flag[2] = true;
309+
}
310+
}
311+
}
312+
// 最后一次遍历,填充剩余的步骤,这里的步骤是可以位于任意位置的步骤,例如BendAny
313+
o: for (ForgeRule rule : rules) {
314+
// 这个步骤的序号对5取余后是0
315+
if (rule.ordinal() % 5 == 0) {
316+
// 遍历lastOperations,如果有空位就填充,并且因为锻造需求里每步出现一次,所以只填充一次,跳出大循环
317+
for (int i = 0; i < 3; i++) {
318+
if (!flag[i]) {
319+
lastOperations[i] = Util.operationsTfc.get(rule.ordinal());
320+
flag[i] = true;
321+
break o;
322+
}
323+
}
324+
}
325+
}
326+
// 如果还有空位,说明锻造需求不满3个,这时将空位填入4,对应锻造数值是2,此时未遍历的需求只有Any,对于Any,填入的数值依然是4
327+
for (int i = 0; i < 3; i++) {
328+
if (!flag[i]) {
329+
lastOperations[i] = 4;
330+
}
331+
}
332+
return lastOperations;
333+
}
323334
}

src/main/resources/mcmod.info

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"modid": "tfcaf",
44
"name": "TFC Auto Forging",
55
"description": "A mod which make you forge perfectly in tfc.",
6-
"version": "1.0",
6+
"version": "1.1",
77
"mcversion": "${mcversion}",
88
"url": "https://github.com/Eternal130",
99
"updateUrl": "",

0 commit comments

Comments
 (0)