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
|
package net.uomc.mineshaft.crafting;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiFunction;
import java.util.function.Function;
import net.dv8tion.jda.api.entities.Member;
import net.uomc.mineshaft.Mineshaft;
import net.uomc.mineshaft.MineshaftItem;
public class CraftingRecipe {
MineshaftItem item;
long quantity;
Map<MineshaftItem, Long> ingredients;
String buyMessage;
Function<Member, Boolean> unlockCondition;
private CraftingRecipe(MineshaftItem item, long quantity, Map<MineshaftItem, Long> ingredients) {
this.item = item;
this.quantity = quantity;
this.ingredients = ingredients;
}
public static CraftingRecipe make(MineshaftItem item) {
Map<MineshaftItem, Long> ingredients = new HashMap<>();
return new CraftingRecipe(item, 1, ingredients);
}
public CraftingRecipe addIngredient(MineshaftItem item, long amount) {
ingredients.put(item, amount);
return this;
}
public MineshaftItem getItem() {
return item;
}
public long getQuantity() {
return quantity;
}
public Map<MineshaftItem, Long> getIngredients() {
return ingredients;
}
public String getBuyMessage() {
if (buyMessage == null)
return "";
return buyMessage;
}
public boolean isUnlocked(Member m) {
if (unlockCondition == null)
return true;
return unlockCondition.apply(m);
}
public CraftingRecipe setBuyMessage(String message) {
buyMessage = message;
return this;
}
public CraftingRecipe setUnlockCondition(Function<Member, Boolean> function) {
this.unlockCondition = function;
return this;
}
public Map<MineshaftItem, Long> getMissingIngredients(Map<MineshaftItem, Long> items) {
return getMissingIngredients(items, 1);
}
public Map<MineshaftItem, Long> getMissingIngredients(Map<MineshaftItem, Long> items, long amount) {
Map<MineshaftItem, Long> lacking = new HashMap<MineshaftItem, Long>();
getIngredients().forEach((item, q) -> {
if (items.get(item) < q* amount) {
lacking.put(item, (q * amount) - items.get(item));
}
});
return Collections.unmodifiableMap(lacking);
}
}
|