本帖最后由 CCxia 于 2019-6-15 22:17 编辑
// 根据输入的物品栈列表遍历Map表,找到对应的Key并返回Value,如果没找到返回空
public ItemStack getSmeltItems(List<ItemStack> items) {
for (Entry<List<ItemStack>, ItemStack> entry : this.smeltingList.entrySet()) {
System.out.println(entry.getKey().get(0).getUnlocalizedName());
List<ItemStack> items1 = entry.getKey();
if (items.size() != items1.size()) {
break;
} else if (items.size() == 1 && items1.size() == 1) {
if (items.get(0).isItemEqual(items1.get(0))) {
return entry.getValue();
} else {
break;
}
} else if (items.size() == 2 && items1.size() == 2) {
if (items.get(0).isItemEqual(items1.get(0)) && items.get(1).isItemEqual(items1.get(1))) {
return entry.getValue();
} else {
break;
}
}
}
return ItemStack.EMPTY;
}
//forge1.12.2,仿照熔炉的烧炼配方,这里用了一个Map表示(原料->成品)的对应关系
private final Map<List<ItemStack>, ItemStack> smeltingList = Maps.<List<ItemStack>, ItemStack>newHashMap();
mod里要写一个类似熔炉的方块,就仿照了熔炉的写法,不过我的原料有两个格子(主料和辅料),所以这边用了List来存(有些只需要主料就添加1个ItemStack,有些要主料和辅料就添加2个ItemStack)。上述方法就是根据输入的List判断是否符合配方要求,如果符合就返回对应的成品,如归不符合就返回空物品栈。
现在遇到了问题,就是如果增强for循环里删去控制台打印语句后面的全部语句,可以正常把每一个key中的物品的名字打印出来,但用上述完整的方法后,发现只打印了两个相同的物品名字循环就结束了,所以Map是正常的,感觉应该是因为什么原因导致entry发生了变化。希望大佬能解答疑惑,感激不尽!
(break是跳出整个for循环,这里我脑抽了居然没发现这个低级错误,应该是用continue!!!引以为戒!!!)
public ItemStack getSmeltItems(List<ItemStack> items) {
for (Entry<List<ItemStack>, ItemStack> entry : this.smeltingList.entrySet()) {
System.out.println(entry.getKey().get(0).getUnlocalizedName());
List<ItemStack> items1 = entry.getKey();
if (items.size() != items1.size()) {
break;
} else if (items.size() == 1 && items1.size() == 1) {
if (items.get(0).isItemEqual(items1.get(0))) {
return entry.getValue();
} else {
break;
}
} else if (items.size() == 2 && items1.size() == 2) {
if (items.get(0).isItemEqual(items1.get(0)) && items.get(1).isItemEqual(items1.get(1))) {
return entry.getValue();
} else {
break;
}
}
}
return ItemStack.EMPTY;
}
//forge1.12.2,仿照熔炉的烧炼配方,这里用了一个Map表示(原料->成品)的对应关系
private final Map<List<ItemStack>, ItemStack> smeltingList = Maps.<List<ItemStack>, ItemStack>newHashMap();
mod里要写一个类似熔炉的方块,就仿照了熔炉的写法,不过我的原料有两个格子(主料和辅料),所以这边用了List来存(有些只需要主料就添加1个ItemStack,有些要主料和辅料就添加2个ItemStack)。上述方法就是根据输入的List判断是否符合配方要求,如果符合就返回对应的成品,如归不符合就返回空物品栈。
现在遇到了问题,就是如果增强for循环里删去控制台打印语句后面的全部语句,可以正常把每一个key中的物品的名字打印出来,但用上述完整的方法后,发现只打印了两个相同的物品名字循环就结束了,所以Map是正常的,感觉应该是因为什么原因导致entry发生了变化。希望大佬能解答疑惑,感激不尽!
(break是跳出整个for循环,这里我脑抽了居然没发现这个低级错误,应该是用continue!!!引以为戒!!!)
// 根据输入的物品栈列表遍历Map表,找到对应的Key并返回Value,如果没找到返回空
public ItemStack getSmeltItems(List<ItemStack> items) {
for (Entry<List<ItemStack>, ItemStack> entry : this.smeltingList.entrySet()) {
System.out.println(entry.getKey().get(0).getUnlocalizedName());
List<ItemStack> items1 = entry.getKey();
if (items.size() != items1.size()) {
break;
} else if (items.size() == 1 && items1.size() == 1) {
if (items.get(0).isItemEqual(items1.get(0))) {
return entry.getValue();
} else {
break;
}
} else if (items.size() == 2 && items1.size() == 2) {
if (items.get(0).isItemEqual(items1.get(0)) && items.get(1).isItemEqual(items1.get(1))) {
return entry.getValue();
} else {
break;
}
}
}
return ItemStack.EMPTY;
}
//forge1.12.2,仿照熔炉的烧炼配方,这里用了一个Map表示(原料->成品)的对应关系
private final Map<List<ItemStack>, ItemStack> smeltingList = Maps.<List<ItemStack>, ItemStack>newHashMap();
mod里要写一个类似熔炉的方块,就仿照了熔炉的写法,不过我的原料有两个格子(主料和辅料),所以这边用了List来存(有些只需要主料就添加1个ItemStack,有些要主料和辅料就添加2个ItemStack)。上述方法就是根据输入的List判断是否符合配方要求,如果符合就返回对应的成品,如归不符合就返回空物品栈。
现在遇到了问题,就是如果增强for循环里删去控制台打印语句后面的全部语句,可以正常把每一个key中的物品的名字打印出来,但用上述完整的方法后,发现只打印了两个相同的物品名字循环就结束了,所以Map是正常的,感觉应该是因为什么原因导致entry发生了变化。希望大佬能解答疑惑,感激不尽!
(break是跳出整个for循环,这里我脑抽了居然没发现这个低级错误,应该是用continue!!!引以为戒!!!)
2021.12 数据,可能有更多内容
// 根据输入的物品栈列表遍历Map表,找到对应的Key并返回Value,如果没找到返回空public ItemStack getSmeltItems(List<ItemStack> items) {
for (Entry<List<ItemStack>, ItemStack> entry : this.smeltingList.entrySet()) {
System.out.println(entry.getKey().get(0).getUnlocalizedName());
List<ItemStack> items1 = entry.getKey();
if (items.size() != items1.size()) {
break;
} else if (items.size() == 1 && items1.size() == 1) {
if (items.get(0).isItemEqual(items1.get(0))) {
return entry.getValue();
} else {
break;
}
} else if (items.size() == 2 && items1.size() == 2) {
if (items.get(0).isItemEqual(items1.get(0)) && items.get(1).isItemEqual(items1.get(1))) {
return entry.getValue();
} else {
break;
}
}
}
return ItemStack.EMPTY;
}
//forge1.12.2,仿照熔炉的烧炼配方,这里用了一个Map表示(原料->成品)的对应关系
private final Map<List<ItemStack>, ItemStack> smeltingList = Maps.<List<ItemStack>, ItemStack>newHashMap();
mod里要写一个类似熔炉的方块,就仿照了熔炉的写法,不过我的原料有两个格子(主料和辅料),所以这边用了List来存(有些只需要主料就添加1个ItemStack,有些要主料和辅料就添加2个ItemStack)。上述方法就是根据输入的List判断是否符合配方要求,如果符合就返回对应的成品,如归不符合就返回空物品栈。
现在遇到了问题,就是如果增强for循环里删去控制台打印语句后面的全部语句,可以正常把每一个key中的物品的名字打印出来,但用上述完整的方法后,发现只打印了两个相同的物品名字循环就结束了,所以Map是正常的,感觉应该是因为什么原因导致entry发生了变化。希望大佬能解答疑惑,感激不尽!
(break是跳出整个for循环,这里我脑抽了居然没发现这个低级错误,应该是用continue!!!引以为戒!!!)
1.
二处
else {
break;
}
删除
2.
items.size() == 2最好调到==1前面,先判断主料和辅料情况,再判断只有主料情况,
如果有配方有这种情况, 主料可合成, 并此主料+辅料也可合成 的情况会出错
二处
else {
break;
}
删除
2.
items.size() == 2最好调到==1前面,先判断主料和辅料情况,再判断只有主料情况,
如果有配方有这种情况, 主料可合成, 并此主料+辅料也可合成 的情况会出错
感谢大佬 已经解决