Skip to content

Commit 16525a8

Browse files
committed
oredict wildcards
1 parent 48aa5d2 commit 16525a8

File tree

3 files changed

+59
-2
lines changed

3 files changed

+59
-2
lines changed

src/main/java/com/cleanroommc/groovyscript/brackets/BracketHandlerManager.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.cleanroommc.groovyscript.api.GroovyLog;
44
import com.cleanroommc.groovyscript.api.IBracketHandler;
55
import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient;
6+
import com.cleanroommc.groovyscript.helper.ingredient.OreDictWildcardIngredient;
67
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
78
import net.minecraft.block.Block;
89
import net.minecraft.creativetab.CreativeTabs;
@@ -54,7 +55,7 @@ public static BracketHandler<?> getBracketHandler(String key) {
5455
}
5556

5657
public static void init() {
57-
registerBracketHandler("ore", OreDictIngredient::new);
58+
registerBracketHandler("ore", s -> s.contains("*") ? OreDictWildcardIngredient.of(s) : new OreDictIngredient(s));
5859
registerBracketHandler("item", ItemBracketHandler.INSTANCE, () -> ItemStack.EMPTY);
5960
registerBracketHandler("liquid", BracketHandlerManager::parseFluidStack);
6061
registerBracketHandler("fluid", BracketHandlerManager::parseFluidStack);

src/main/java/com/cleanroommc/groovyscript/helper/ingredient/ItemsIngredient.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import java.util.Collection;
99
import java.util.Collections;
10+
import java.util.List;
1011

1112
public class ItemsIngredient extends IngredientBase {
1213

@@ -34,7 +35,7 @@ public IIngredient exactCopy() {
3435

3536
@Override
3637
public Ingredient toMcIngredient() {
37-
return Ingredient.fromStacks(itemStacks.toArray(new ItemStack[0]));
38+
return Ingredient.fromStacks(getMatchingStacks());
3839
}
3940

4041
@Override
@@ -67,4 +68,8 @@ public boolean matches(ItemStack itemStack) {
6768
}
6869
return false;
6970
}
71+
72+
public List<ItemStack> getItemStacks() {
73+
return Collections.unmodifiableList(this.itemStacks);
74+
}
7075
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.cleanroommc.groovyscript.helper.ingredient;
2+
3+
import com.cleanroommc.groovyscript.api.IIngredient;
4+
import com.cleanroommc.groovyscript.core.mixin.OreDictionaryAccessor;
5+
import net.minecraft.item.ItemStack;
6+
import net.minecraftforge.oredict.OreDictionary;
7+
8+
import java.util.ArrayList;
9+
import java.util.List;
10+
import java.util.regex.Pattern;
11+
12+
public class OreDictWildcardIngredient extends ItemsIngredient {
13+
14+
private final String oreDict;
15+
private final List<String> matchingOreDictionaries = new ArrayList<>();
16+
17+
public static OreDictWildcardIngredient of(String oreDict) {
18+
List<String> matchingOreDictionaries = new ArrayList<>();
19+
List<ItemStack> stacks = new ArrayList<>();
20+
Pattern pattern = Pattern.compile(oreDict.replace("*", ".*"));
21+
22+
for (String ore : OreDictionaryAccessor.getIdToName()) {
23+
if (pattern.matcher(ore).matches()) {
24+
matchingOreDictionaries.add(ore);
25+
for (ItemStack stack : OreDictionary.getOres(ore)) {
26+
stacks.add(stack.copy());
27+
}
28+
}
29+
}
30+
return new OreDictWildcardIngredient(oreDict, matchingOreDictionaries, stacks);
31+
}
32+
33+
public OreDictWildcardIngredient(String oreDict, List<String> matchingOreDictionaries, List<ItemStack> itemStacks) {
34+
super(itemStacks);
35+
this.oreDict = oreDict;
36+
this.matchingOreDictionaries.addAll(matchingOreDictionaries);
37+
}
38+
39+
public String getOreDict() {
40+
return oreDict;
41+
}
42+
43+
public List<String> getMatchingOreDictionaries() {
44+
return matchingOreDictionaries;
45+
}
46+
47+
@Override
48+
public IIngredient exactCopy() {
49+
return new OreDictWildcardIngredient(this.oreDict, this.matchingOreDictionaries, getItemStacks());
50+
}
51+
}

0 commit comments

Comments
 (0)