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.parts.PartModel;
|
||||||
import appeng.util.ConfigManager;
|
import appeng.util.ConfigManager;
|
||||||
import appeng.util.Platform;
|
import appeng.util.Platform;
|
||||||
import appeng.util.item.OreHelper;
|
import appeng.util.item.OreDictFilterMatcher;
|
||||||
import appeng.util.prioritylist.IPartitionList;
|
import appeng.util.prioritylist.IPartitionList;
|
||||||
import appeng.util.prioritylist.OreDictPriorityList;
|
import appeng.util.prioritylist.OreDictPriorityList;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
@@ -51,7 +51,9 @@ public class PartOreDicStorageBus extends PartStorageBus {
|
|||||||
public void readFromNBT(NBTTagCompound data) {
|
public void readFromNBT(NBTTagCompound data) {
|
||||||
super.readFromNBT(data);
|
super.readFromNBT(data);
|
||||||
this.oreExp = data.getString("oreMatch");
|
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
|
@Override
|
||||||
@@ -148,7 +150,8 @@ public class PartOreDicStorageBus extends PartStorageBus {
|
|||||||
|
|
||||||
private IPartitionList<IAEItemStack> getPriorityList() {
|
private IPartitionList<IAEItemStack> getPriorityList() {
|
||||||
if (priorityList == null) {
|
if (priorityList == null) {
|
||||||
this.priorityList = new OreDictPriorityList<>(OreHelper.INSTANCE.getMatchingOre(oreExp), oreExp);
|
var ruleList = OreDictFilterMatcher.parseExpression(oreExp);
|
||||||
|
priorityList = new OreDictPriorityList<>(ruleList);
|
||||||
}
|
}
|
||||||
return priorityList;
|
return priorityList;
|
||||||
}
|
}
|
||||||
@@ -164,7 +167,8 @@ public class PartOreDicStorageBus extends PartStorageBus {
|
|||||||
if (!this.oreExp.equals(oreMatch)) {
|
if (!this.oreExp.equals(oreMatch)) {
|
||||||
this.oreExp = 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.resetCache(true);
|
||||||
this.getHost().markForSave();
|
this.getHost().markForSave();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -130,10 +130,9 @@ public class OreHelper {
|
|||||||
}).orElse(false);
|
}).orElse(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<Integer> getMatchingOre(String oreExp) {
|
public Set<Integer> getMatchingOre(List<OreDictFilterMatcher.MatchRule> rulesList) {
|
||||||
Set<Integer> matchingIds = new HashSet<>();
|
Set<Integer> matchingIds = new HashSet<>();
|
||||||
|
|
||||||
List<OreDictFilterMatcher.MatchRule> rulesList = OreDictFilterMatcher.parseExpression(oreExp);
|
|
||||||
for (String ore : OreDictionary.getOreNames()) {
|
for (String ore : OreDictionary.getOreNames()) {
|
||||||
if (ore == null) {
|
if (ore == null) {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -2,29 +2,33 @@ package appeng.util.prioritylist;
|
|||||||
|
|
||||||
import appeng.api.storage.data.IAEStack;
|
import appeng.api.storage.data.IAEStack;
|
||||||
import appeng.util.item.AEItemStack;
|
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 appeng.util.item.OreReference;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
|
||||||
public class OreDictPriorityList<T extends IAEStack<T>> implements IPartitionList<T> {
|
public class OreDictPriorityList<T extends IAEStack<T>> implements IPartitionList<T> {
|
||||||
private final Set<Integer> oreIDs;
|
private final Set<Integer> oreIDs;
|
||||||
private final String oreMatch;
|
private final boolean matchesEmptyOreDict;
|
||||||
|
|
||||||
public OreDictPriorityList(Set<Integer> oreIDs, String oreMatch) {
|
public OreDictPriorityList(List<MatchRule> oreMatch) {
|
||||||
this.oreIDs = oreIDs;
|
this.oreIDs = OreHelper.INSTANCE.getMatchingOre(oreMatch);
|
||||||
this.oreMatch = oreMatch;
|
this.matchesEmptyOreDict = OreDictFilterMatcher.matches(oreMatch, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isListed(final T input) {
|
public boolean isListed(final T input) {
|
||||||
OreReference or = ((AEItemStack) input).getOre().orElse(null);
|
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)) {
|
for (Integer oreID : or.getOres()) {
|
||||||
return true;
|
if (this.oreIDs.contains(oreID)) {
|
||||||
}
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -32,7 +36,7 @@ public class OreDictPriorityList<T extends IAEStack<T>> implements IPartitionLis
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isEmpty() {
|
public boolean isEmpty() {
|
||||||
return oreMatch.equals("");
|
return oreIDs.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user