Fix OreDict filters not testing items without entries
This commit is contained in:
@@ -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<IAEItemStack> 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();
|
||||
}
|
||||
|
||||
@@ -130,10 +130,9 @@ public class OreHelper {
|
||||
}).orElse(false);
|
||||
}
|
||||
|
||||
public Set<Integer> getMatchingOre(String oreExp) {
|
||||
public Set<Integer> getMatchingOre(List<OreDictFilterMatcher.MatchRule> rulesList) {
|
||||
Set<Integer> matchingIds = new HashSet<>();
|
||||
|
||||
List<OreDictFilterMatcher.MatchRule> rulesList = OreDictFilterMatcher.parseExpression(oreExp);
|
||||
for (String ore : OreDictionary.getOreNames()) {
|
||||
if (ore == null) {
|
||||
continue;
|
||||
|
||||
@@ -2,37 +2,41 @@ 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<T extends IAEStack<T>> implements IPartitionList<T> {
|
||||
private final Set<Integer> oreIDs;
|
||||
private final String oreMatch;
|
||||
private final boolean matchesEmptyOreDict;
|
||||
|
||||
public OreDictPriorityList(Set<Integer> oreIDs, String oreMatch) {
|
||||
this.oreIDs = oreIDs;
|
||||
this.oreMatch = oreMatch;
|
||||
public OreDictPriorityList(List<MatchRule> 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) {
|
||||
if (or == null) return matchesEmptyOreDict;
|
||||
|
||||
for (Integer oreID : or.getOres()) {
|
||||
if (this.oreIDs.contains(oreID)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return oreMatch.equals("");
|
||||
return oreIDs.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user