Fixed Hopper Filtering

This commit is contained in:
jameslfc19 2020-07-22 13:54:52 +01:00
parent d006e6d71a
commit e8a24093fb
2 changed files with 12 additions and 3 deletions

View File

@ -8,17 +8,20 @@ public class Filter {
enum Type {
ACCEPT,
REJECT
REJECT,
NONE
}
private ItemStack filter;
private boolean filterByItemMeta;
private boolean dontAllowThisItem;
private Type filteringMethod;
public Filter(ItemStack filter, ItemFrame itemFrame){
this.filter = filter;
this.filterByItemMeta = itemFrame.getRotation().equals(Rotation.FLIPPED) || itemFrame.getRotation().equals(Rotation.COUNTER_CLOCKWISE);
this.dontAllowThisItem = itemFrame.getRotation().equals(Rotation.CLOCKWISE) || itemFrame.getRotation().equals(Rotation.COUNTER_CLOCKWISE);
filteringMethod = dontAllowThisItem ? Type.REJECT : Type.ACCEPT;
}
public Type getFilterType(ItemStack itemStack){
@ -31,7 +34,7 @@ public class Filter {
else return Type.ACCEPT;
}
if(isFilteredByMeta(itemStack)) return Type.ACCEPT;
return Type.REJECT;
return Type.NONE;
}
private boolean isFilteredByMeta(ItemStack itemStack){
@ -41,4 +44,8 @@ public class Filter {
}
return false;
}
public Type getFilteringMethod(){
return filteringMethod;
}
}

View File

@ -15,7 +15,9 @@ public class HopperFilter {
public static boolean isInFilter(List<Filter> filters, ItemStack item){
if(filters == null) return true;
if(filters.size() == 0) return true;
return filters.stream().noneMatch(filter -> filter.getFilterType(item).equals(Filter.Type.REJECT));
boolean hasAcceptFilter = filters.stream().filter(filter -> filter.getFilteringMethod() == Filter.Type.ACCEPT).anyMatch(filter -> filter.getFilterType(item).equals(Filter.Type.ACCEPT));
boolean isRejected = filters.stream().filter(filter -> filter.getFilteringMethod() == Filter.Type.REJECT).anyMatch(filter -> filter.getFilterType(item).equals(Filter.Type.REJECT));
return hasAcceptFilter && !isRejected;
}
public static List<Filter> getHopperFilters(Block block){