mirror of
https://github.com/JamesPeters98/ChestsPlusPlus.git
synced 2025-02-13 19:12:07 +01:00
Fixed Hopper Filtering
This commit is contained in:
parent
d006e6d71a
commit
e8a24093fb
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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){
|
||||
|
Loading…
Reference in New Issue
Block a user