diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java index a97ab05f7c..9c19862f44 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java @@ -23,4 +23,8 @@ public interface Filter> extends Predicate { default boolean isBlackList() { return false; } + + default boolean isBlank() { + return false; + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java index ca2f9dd9ad..5855d4c1be 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java @@ -117,7 +117,13 @@ public FilterHandler onFilterUpdated(Consumer onFilterUpdated) { private CustomItemStackHandler getFilterSlot() { if (this.filterSlot == null) { - this.filterSlot = new CustomItemStackHandler(this.filterItem); + this.filterSlot = new CustomItemStackHandler(this.filterItem) { + + @Override + public int getSlotLimit(int slot) { + return 1; + } + }; this.filterSlot.setFilter(this::canInsertFilterItem); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java index 124d1096e2..764ed6949d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java @@ -73,7 +73,15 @@ public void setOnUpdated(Consumer onUpdated) { }; } + @Override + public boolean isBlank() { + return !isBlackList && !ignoreNbt && Arrays.stream(matches).allMatch(FluidStack::isEmpty); + } + public CompoundTag saveFilter() { + if (isBlank()) { + return null; + } var tag = new CompoundTag(); tag.putBoolean("isBlackList", isBlackList); tag.putBoolean("matchNbt", ignoreNbt); diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java index 16c7009f03..bf7ab9857c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java @@ -72,7 +72,15 @@ public void setOnUpdated(Consumer onUpdated) { }; } + @Override + public boolean isBlank() { + return !isBlackList && !ignoreNbt && Arrays.stream(matches).allMatch(ItemStack::isEmpty); + } + public CompoundTag saveFilter() { + if (isBlank()) { + return null; + } var tag = new CompoundTag(); tag.putBoolean("isBlackList", isBlackList); tag.putBoolean("matchNbt", ignoreNbt); diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java index dcd3d916dc..f955c313d3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/SmartItemFilter.java @@ -49,8 +49,16 @@ public void setOnUpdated(Consumer onUpdated) { }; } + @Override + public boolean isBlank() { + return filterMode.ordinal() == 0; + } + @Override public CompoundTag saveFilter() { + if (isBlank()) { + return null; + } var tag = new CompoundTag(); tag.putInt("filterMode", filterMode.ordinal()); return tag; diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java index 11dd35cc9f..40f7719173 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagFilter.java @@ -40,7 +40,15 @@ public abstract class TagFilter> implements Filter implement protected TagFluidFilter() {} public static TagFluidFilter loadFilter(ItemStack itemStack) { - return loadFilter(itemStack.getOrCreateTag(), filter -> itemStack.setTag(filter.saveFilter())); + return loadFilter(Objects.requireNonNullElseGet(itemStack.getTag(), CompoundTag::new), + filter -> itemStack.setTag(filter.saveFilter())); } private static TagFluidFilter loadFilter(CompoundTag tag, Consumer itemWriter) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagItemFilter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagItemFilter.java index f50bb95b75..06fff4d384 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagItemFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/TagItemFilter.java @@ -9,6 +9,7 @@ import it.unimi.dsi.fastutil.objects.Object2BooleanMap; import it.unimi.dsi.fastutil.objects.Object2BooleanOpenHashMap; +import java.util.Objects; import java.util.function.Consumer; /** @@ -23,7 +24,8 @@ public class TagItemFilter extends TagFilter implements I protected TagItemFilter() {} public static TagItemFilter loadFilter(ItemStack itemStack) { - return loadFilter(itemStack.getOrCreateTag(), filter -> itemStack.setTag(filter.saveFilter())); + return loadFilter(Objects.requireNonNullElseGet(itemStack.getTag(), CompoundTag::new), + filter -> itemStack.setTag(filter.saveFilter())); } private static TagItemFilter loadFilter(CompoundTag tag, Consumer itemWriter) {