diff --git a/src/main/java/appeng/parts/misc/PartOreDicStorageBus.java b/src/main/java/appeng/parts/misc/PartOreDicStorageBus.java index 08d5e37c2..5a57d7349 100644 --- a/src/main/java/appeng/parts/misc/PartOreDicStorageBus.java +++ b/src/main/java/appeng/parts/misc/PartOreDicStorageBus.java @@ -19,7 +19,7 @@ import appeng.me.storage.MEInventoryHandler; import appeng.parts.PartModel; import appeng.util.ConfigManager; import appeng.util.Platform; -import appeng.util.item.OreHelper; +import appeng.util.item.OreDictFilterMatcher; import appeng.util.prioritylist.IPartitionList; import appeng.util.prioritylist.OreDictPriorityList; import net.minecraft.entity.player.EntityPlayer; @@ -51,7 +51,9 @@ public class PartOreDicStorageBus extends PartStorageBus { public void readFromNBT(NBTTagCompound data) { super.readFromNBT(data); this.oreExp = data.getString("oreMatch"); - this.priorityList = new OreDictPriorityList<>(OreHelper.INSTANCE.getMatchingOre(oreExp), oreExp); + + var rulesList = OreDictFilterMatcher.parseExpression(oreExp); + this.priorityList = new OreDictPriorityList<>(rulesList); } @Override @@ -148,7 +150,8 @@ public class PartOreDicStorageBus extends PartStorageBus { private IPartitionList getPriorityList() { if (priorityList == null) { - this.priorityList = new OreDictPriorityList<>(OreHelper.INSTANCE.getMatchingOre(oreExp), oreExp); + var ruleList = OreDictFilterMatcher.parseExpression(oreExp); + priorityList = new OreDictPriorityList<>(ruleList); } return priorityList; } @@ -164,7 +167,8 @@ public class PartOreDicStorageBus extends PartStorageBus { if (!this.oreExp.equals(oreMatch)) { this.oreExp = oreMatch; - this.priorityList = new OreDictPriorityList<>(OreHelper.INSTANCE.getMatchingOre(oreExp), oreExp); + var ruleList = OreDictFilterMatcher.parseExpression(oreMatch); + this.priorityList = new OreDictPriorityList<>(ruleList); this.resetCache(true); this.getHost().markForSave(); } diff --git a/src/main/java/appeng/util/item/OreHelper.java b/src/main/java/appeng/util/item/OreHelper.java index 71d527271..96aafb093 100644 --- a/src/main/java/appeng/util/item/OreHelper.java +++ b/src/main/java/appeng/util/item/OreHelper.java @@ -130,10 +130,9 @@ public class OreHelper { }).orElse(false); } - public Set getMatchingOre(String oreExp) { + public Set getMatchingOre(List rulesList) { Set matchingIds = new HashSet<>(); - List rulesList = OreDictFilterMatcher.parseExpression(oreExp); for (String ore : OreDictionary.getOreNames()) { if (ore == null) { continue; diff --git a/src/main/java/appeng/util/prioritylist/OreDictPriorityList.java b/src/main/java/appeng/util/prioritylist/OreDictPriorityList.java index 0d3fa4010..0431a0aa8 100644 --- a/src/main/java/appeng/util/prioritylist/OreDictPriorityList.java +++ b/src/main/java/appeng/util/prioritylist/OreDictPriorityList.java @@ -2,29 +2,33 @@ package appeng.util.prioritylist; import appeng.api.storage.data.IAEStack; import appeng.util.item.AEItemStack; +import appeng.util.item.OreDictFilterMatcher; +import appeng.util.item.OreDictFilterMatcher.MatchRule; +import appeng.util.item.OreHelper; import appeng.util.item.OreReference; import java.util.ArrayList; +import java.util.List; import java.util.Set; public class OreDictPriorityList> implements IPartitionList { private final Set oreIDs; - private final String oreMatch; + private final boolean matchesEmptyOreDict; - public OreDictPriorityList(Set oreIDs, String oreMatch) { - this.oreIDs = oreIDs; - this.oreMatch = oreMatch; + public OreDictPriorityList(List oreMatch) { + this.oreIDs = OreHelper.INSTANCE.getMatchingOre(oreMatch); + this.matchesEmptyOreDict = OreDictFilterMatcher.matches(oreMatch, ""); } @Override public boolean isListed(final T input) { OreReference or = ((AEItemStack) input).getOre().orElse(null); - if (or != null) { - for (Integer oreID : or.getOres()) { - if (this.oreIDs.contains(oreID)) { - return true; - } + if (or == null) return matchesEmptyOreDict; + + for (Integer oreID : or.getOres()) { + if (this.oreIDs.contains(oreID)) { + return true; } } return false; @@ -32,7 +36,7 @@ public class OreDictPriorityList> implements IPartitionLis @Override public boolean isEmpty() { - return oreMatch.equals(""); + return oreIDs.isEmpty(); } @Override