From 11cd27deee7847d9e9e10d5079e1220930d3fa6c Mon Sep 17 00:00:00 2001 From: jameslfc19 Date: Sat, 18 Jul 2020 18:30:19 +0100 Subject: [PATCH] Fix for Filters. Multiple filters were causing problems when rejecting items. --- .../minecraft/chests/filters/Filter.java | 20 +++++++++++++++---- .../chests/filters/HopperFilter.java | 6 +----- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/Filter.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/Filter.java index dc974b6..51e269b 100644 --- a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/Filter.java +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/Filter.java @@ -6,6 +6,11 @@ import org.bukkit.inventory.ItemStack; public class Filter { + enum Type { + ACCEPT, + REJECT + } + private ItemStack filter; private boolean filterByItemMeta; private boolean dontAllowThisItem; @@ -16,10 +21,17 @@ public class Filter { this.dontAllowThisItem = itemFrame.getRotation().equals(Rotation.CLOCKWISE) || itemFrame.getRotation().equals(Rotation.COUNTER_CLOCKWISE); } - public boolean isFiltered(ItemStack itemStack){ - if(dontAllowThisItem && !filterByItemMeta) return !filter.isSimilar(itemStack); - else if (dontAllowThisItem) return !isFilteredByMeta(itemStack); - return isFilteredByMeta(itemStack); + public Type getFilterType(ItemStack itemStack){ + if(dontAllowThisItem && !filterByItemMeta){ + if(filter.isSimilar(itemStack)) return Type.REJECT; + else return Type.ACCEPT; + } + else if (dontAllowThisItem){ + if(isFilteredByMeta(itemStack)) return Type.REJECT; + else return Type.ACCEPT; + } + if(isFilteredByMeta(itemStack)) return Type.ACCEPT; + return Type.REJECT; } private boolean isFilteredByMeta(ItemStack itemStack){ diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/HopperFilter.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/HopperFilter.java index 8a4668a..428cc46 100644 --- a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/HopperFilter.java +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/filters/HopperFilter.java @@ -1,7 +1,6 @@ package com.jamesdpeters.minecraft.chests.filters; import org.bukkit.Material; -import org.bukkit.Rotation; import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.ItemFrame; @@ -16,10 +15,7 @@ public class HopperFilter { public static boolean isInFilter(List filters, ItemStack item){ if(filters == null) return true; if(filters.size() == 0) return true; - for(Filter filter : filters){ - if(filter.isFiltered(item)) return true; - } - return false; + return filters.stream().noneMatch(filter -> filter.getFilterType(item).equals(Filter.Type.REJECT)); } public static List getHopperFilters(Block block){