Cleanup filtering system.

This commit is contained in:
raoulvdberge
2020-10-18 17:57:33 +02:00
parent 3c10b1e5e1
commit c856c554b7
13 changed files with 87 additions and 98 deletions

View File

@@ -3,14 +3,14 @@ package com.refinedmods.refinedstorage.api.util;
/** /**
* A filter. * A filter.
*/ */
public interface IFilter<T> { public interface IFilter {
int MODE_WHITELIST = 0; int MODE_WHITELIST = 0;
int MODE_BLACKLIST = 1; int MODE_BLACKLIST = 1;
/** /**
* @return the stack being filtered * @return the stack being filtered
*/ */
T getStack(); Object getStack();
/** /**
* @return the compare flags, see {@link IComparer} * @return the compare flags, see {@link IComparer}

View File

@@ -3,7 +3,7 @@ package com.refinedmods.refinedstorage.apiimpl.util;
import com.refinedmods.refinedstorage.api.util.IFilter; import com.refinedmods.refinedstorage.api.util.IFilter;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
public class FluidFilter implements IFilter<FluidStack> { public class FluidFilter implements IFilter {
private final FluidStack stack; private final FluidStack stack;
private final int compare; private final int compare;
private final int mode; private final int mode;
@@ -17,7 +17,7 @@ public class FluidFilter implements IFilter<FluidStack> {
} }
@Override @Override
public FluidStack getStack() { public Object getStack() {
return stack; return stack;
} }

View File

@@ -3,7 +3,7 @@ package com.refinedmods.refinedstorage.apiimpl.util;
import com.refinedmods.refinedstorage.api.util.IFilter; import com.refinedmods.refinedstorage.api.util.IFilter;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
public class ItemFilter implements IFilter<ItemStack> { public class ItemFilter implements IFilter {
private final ItemStack stack; private final ItemStack stack;
private final int compare; private final int compare;
private final int mode; private final int mode;
@@ -17,7 +17,7 @@ public class ItemFilter implements IFilter<ItemStack> {
} }
@Override @Override
public ItemStack getStack() { public Object getStack() {
return stack; return stack;
} }

View File

@@ -3,33 +3,33 @@ package com.refinedmods.refinedstorage.container;
import com.refinedmods.refinedstorage.RSContainers; import com.refinedmods.refinedstorage.RSContainers;
import com.refinedmods.refinedstorage.container.slot.filter.FilterSlot; import com.refinedmods.refinedstorage.container.slot.filter.FilterSlot;
import com.refinedmods.refinedstorage.container.slot.filter.FluidFilterSlot; import com.refinedmods.refinedstorage.container.slot.filter.FluidFilterSlot;
import com.refinedmods.refinedstorage.inventory.fluid.FilterFluidInventory; import com.refinedmods.refinedstorage.inventory.fluid.ConfiguredFluidsInFilterItemHandler;
import com.refinedmods.refinedstorage.inventory.fluid.FilterIconFluidInventory; import com.refinedmods.refinedstorage.inventory.fluid.ConfiguredIconInFluidFilterItemHandler;
import com.refinedmods.refinedstorage.inventory.fluid.FluidInventory; import com.refinedmods.refinedstorage.inventory.fluid.FluidInventory;
import com.refinedmods.refinedstorage.inventory.item.FilterIconItemHandler; import com.refinedmods.refinedstorage.inventory.item.ConfiguredIconInFilterItemHandler;
import com.refinedmods.refinedstorage.inventory.item.FilterItemsItemHandler; import com.refinedmods.refinedstorage.inventory.item.ConfiguredItemsInFilterItemHandler;
import com.refinedmods.refinedstorage.item.FilterItem; import com.refinedmods.refinedstorage.item.FilterItem;
import com.refinedmods.refinedstorage.tile.config.IType; import com.refinedmods.refinedstorage.tile.config.IType;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
public class FilterContainer extends BaseContainer { public class FilterContainer extends BaseContainer {
private final ItemStack stack; private final ItemStack filterItem;
public FilterContainer(PlayerEntity player, ItemStack stack, int windowId) { public FilterContainer(PlayerEntity player, ItemStack filterItem, int windowId) {
super(RSContainers.FILTER, null, player, windowId); super(RSContainers.FILTER, null, player, windowId);
this.stack = stack; this.filterItem = filterItem;
int y = 20; int y = 20;
int x = 8; int x = 8;
FilterItemsItemHandler filter = new FilterItemsItemHandler(stack); ConfiguredItemsInFilterItemHandler filter = new ConfiguredItemsInFilterItemHandler(filterItem);
FluidInventory fluidFilter = new FilterFluidInventory(stack); FluidInventory fluidFilter = new ConfiguredFluidsInFilterItemHandler(filterItem);
for (int i = 0; i < 27; ++i) { for (int i = 0; i < 27; ++i) {
addSlot(new FilterSlot(filter, i, x, y).setEnableHandler(() -> FilterItem.getType(stack) == IType.ITEMS)); addSlot(new FilterSlot(filter, i, x, y).setEnableHandler(() -> FilterItem.getType(filterItem) == IType.ITEMS));
addSlot(new FluidFilterSlot(fluidFilter, i, x, y).setEnableHandler(() -> FilterItem.getType(stack) == IType.FLUIDS)); addSlot(new FluidFilterSlot(fluidFilter, i, x, y).setEnableHandler(() -> FilterItem.getType(filterItem) == IType.FLUIDS));
if ((i + 1) % 9 == 0) { if ((i + 1) % 9 == 0) {
x = 8; x = 8;
@@ -39,16 +39,16 @@ public class FilterContainer extends BaseContainer {
} }
} }
addSlot(new FilterSlot(new FilterIconItemHandler(stack), 0, 8, 117).setEnableHandler(() -> FilterItem.getType(stack) == IType.ITEMS)); addSlot(new FilterSlot(new ConfiguredIconInFilterItemHandler(filterItem), 0, 8, 117).setEnableHandler(() -> FilterItem.getType(filterItem) == IType.ITEMS));
addSlot(new FluidFilterSlot(new FilterIconFluidInventory(stack), 0, 8, 117).setEnableHandler(() -> FilterItem.getType(stack) == IType.FLUIDS)); addSlot(new FluidFilterSlot(new ConfiguredIconInFluidFilterItemHandler(filterItem), 0, 8, 117).setEnableHandler(() -> FilterItem.getType(filterItem) == IType.FLUIDS));
addPlayerInventory(8, 149); addPlayerInventory(8, 149);
transferManager.addFilterTransfer(player.inventory, filter, fluidFilter, () -> FilterItem.getType(stack)); transferManager.addFilterTransfer(player.inventory, filter, fluidFilter, () -> FilterItem.getType(filterItem));
} }
public ItemStack getStack() { public ItemStack getFilterItem() {
return stack; return filterItem;
} }
@Override @Override

View File

@@ -6,8 +6,8 @@ import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.NonNullList; import net.minecraft.util.NonNullList;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
public class FilterFluidInventory extends FluidInventory { public class ConfiguredFluidsInFilterItemHandler extends FluidInventory {
public FilterFluidInventory(ItemStack stack) { public ConfiguredFluidsInFilterItemHandler(ItemStack stack) {
super(27, Integer.MAX_VALUE); super(27, Integer.MAX_VALUE);
this.addListener((handler, slot, reading) -> { this.addListener((handler, slot, reading) -> {
@@ -23,7 +23,7 @@ public class FilterFluidInventory extends FluidInventory {
} }
} }
public NonNullList<FluidStack> getFilteredFluids() { public NonNullList<FluidStack> getConfiguredFluids() {
NonNullList<FluidStack> list = NonNullList.create(); NonNullList<FluidStack> list = NonNullList.create();
for (FluidStack fluid : this.getFluids()) { for (FluidStack fluid : this.getFluids()) {

View File

@@ -5,8 +5,8 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
public class FilterIconFluidInventory extends FluidInventory { public class ConfiguredIconInFluidFilterItemHandler extends FluidInventory {
public FilterIconFluidInventory(ItemStack stack) { public ConfiguredIconInFluidFilterItemHandler(ItemStack stack) {
super(1, Integer.MAX_VALUE); super(1, Integer.MAX_VALUE);
this.addListener((handler, slot, reading) -> { this.addListener((handler, slot, reading) -> {

View File

@@ -0,0 +1,24 @@
package com.refinedmods.refinedstorage.inventory.item;
import com.refinedmods.refinedstorage.item.FilterItem;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.ItemStackHandler;
public class ConfiguredIconInFilterItemHandler extends ItemStackHandler {
private final ItemStack filterItem;
public ConfiguredIconInFilterItemHandler(ItemStack filterItem) {
super(1);
this.filterItem = filterItem;
setStackInSlot(0, FilterItem.getIcon(filterItem));
}
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
FilterItem.setIcon(filterItem, getStackInSlot(0));
}
}

View File

@@ -6,10 +6,10 @@ import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.NonNullList; import net.minecraft.util.NonNullList;
import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.ItemStackHandler;
public class FilterItemsItemHandler extends ItemStackHandler { public class ConfiguredItemsInFilterItemHandler extends ItemStackHandler {
private final ItemStack stack; private final ItemStack stack;
public FilterItemsItemHandler(ItemStack stack) { public ConfiguredItemsInFilterItemHandler(ItemStack stack) {
super(27); super(27);
this.stack = stack; this.stack = stack;
@@ -30,7 +30,7 @@ public class FilterItemsItemHandler extends ItemStackHandler {
StackUtils.writeItems(this, 0, stack.getTag()); StackUtils.writeItems(this, 0, stack.getTag());
} }
public NonNullList<ItemStack> getFilteredItems() { public NonNullList<ItemStack> getConfiguredItems() {
return stacks; return stacks;
} }
} }

View File

@@ -1,24 +0,0 @@
package com.refinedmods.refinedstorage.inventory.item;
import com.refinedmods.refinedstorage.item.FilterItem;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.ItemStackHandler;
public class FilterIconItemHandler extends ItemStackHandler {
private final ItemStack stack;
public FilterIconItemHandler(ItemStack stack) {
super(1);
this.stack = stack;
setStackInSlot(0, FilterItem.getIcon(stack));
}
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
FilterItem.setIcon(stack, getStackInSlot(0));
}
}

View File

@@ -6,7 +6,7 @@ import com.refinedmods.refinedstorage.api.util.IFilter;
import com.refinedmods.refinedstorage.apiimpl.network.grid.GridTab; import com.refinedmods.refinedstorage.apiimpl.network.grid.GridTab;
import com.refinedmods.refinedstorage.apiimpl.util.FluidFilter; import com.refinedmods.refinedstorage.apiimpl.util.FluidFilter;
import com.refinedmods.refinedstorage.apiimpl.util.ItemFilter; import com.refinedmods.refinedstorage.apiimpl.util.ItemFilter;
import com.refinedmods.refinedstorage.inventory.fluid.FilterFluidInventory; import com.refinedmods.refinedstorage.inventory.fluid.ConfiguredFluidsInFilterItemHandler;
import com.refinedmods.refinedstorage.inventory.item.validator.ItemValidator; import com.refinedmods.refinedstorage.inventory.item.validator.ItemValidator;
import com.refinedmods.refinedstorage.item.FilterItem; import com.refinedmods.refinedstorage.item.FilterItem;
import com.refinedmods.refinedstorage.screen.BaseScreen; import com.refinedmods.refinedstorage.screen.BaseScreen;
@@ -40,10 +40,9 @@ public class FilterItemHandler extends BaseItemHandler {
tabs.clear(); tabs.clear();
for (int i = 0; i < getSlots(); ++i) { for (int i = 0; i < getSlots(); ++i) {
ItemStack filter = getStackInSlot(i); ItemStack filterItem = getStackInSlot(i);
if (!filterItem.isEmpty()) {
if (!filter.isEmpty()) { handleFilterItem(filterItem);
addFilter(filter);
} }
} }
@@ -52,36 +51,31 @@ public class FilterItemHandler extends BaseItemHandler {
} }
} }
private void addFilter(ItemStack filter) { private void handleFilterItem(ItemStack filterItem) {
int compare = FilterItem.getCompare(filter); ItemStack icon = FilterItem.getIcon(filterItem);
int mode = FilterItem.getMode(filter); FluidStack fluidIcon = FilterItem.getFluidIcon(filterItem);
boolean modFilter = FilterItem.isModFilter(filter); int compare = FilterItem.getCompare(filterItem);
int mode = FilterItem.getMode(filterItem);
boolean modFilter = FilterItem.isModFilter(filterItem);
List<IFilter> filters = new ArrayList<>(); List<IFilter> foundFilters = new ArrayList<>();
FilterItemsItemHandler items = new FilterItemsItemHandler(filter); for (ItemStack stack : new ConfiguredItemsInFilterItemHandler(filterItem).getConfiguredItems()) {
for (ItemStack stack : items.getFilteredItems()) {
if (stack.getItem() == RSItems.FILTER.get()) { if (stack.getItem() == RSItems.FILTER.get()) {
addFilter(stack); handleFilterItem(stack);
} else if (!stack.isEmpty()) { } else if (!stack.isEmpty()) {
filters.add(new ItemFilter(stack, compare, mode, modFilter)); foundFilters.add(new ItemFilter(stack, compare, mode, modFilter));
} }
} }
FilterFluidInventory fluids = new FilterFluidInventory(filter); for (FluidStack stack : new ConfiguredFluidsInFilterItemHandler(filterItem).getConfiguredFluids()) {
foundFilters.add(new FluidFilter(stack, compare, mode, modFilter));
for (FluidStack stack : fluids.getFilteredFluids()) {
filters.add(new FluidFilter(stack, compare, mode, modFilter));
} }
ItemStack icon = FilterItem.getIcon(filter);
FluidStack fluidIcon = FilterItem.getFluidIcon(filter);
if (icon.isEmpty() && fluidIcon.isEmpty()) { if (icon.isEmpty() && fluidIcon.isEmpty()) {
this.filters.addAll(filters); filters.addAll(foundFilters);
} else { } else {
tabs.add(new GridTab(filters, FilterItem.getName(filter), icon, fluidIcon)); tabs.add(new GridTab(foundFilters, FilterItem.getName(filterItem), icon, fluidIcon));
} }
} }
} }

View File

@@ -5,8 +5,8 @@ import com.refinedmods.refinedstorage.RSItems;
import com.refinedmods.refinedstorage.api.util.IComparer; import com.refinedmods.refinedstorage.api.util.IComparer;
import com.refinedmods.refinedstorage.api.util.IFilter; import com.refinedmods.refinedstorage.api.util.IFilter;
import com.refinedmods.refinedstorage.container.FilterContainer; import com.refinedmods.refinedstorage.container.FilterContainer;
import com.refinedmods.refinedstorage.inventory.fluid.FilterFluidInventory; import com.refinedmods.refinedstorage.inventory.fluid.ConfiguredFluidsInFilterItemHandler;
import com.refinedmods.refinedstorage.inventory.item.FilterItemsItemHandler; import com.refinedmods.refinedstorage.inventory.item.ConfiguredItemsInFilterItemHandler;
import com.refinedmods.refinedstorage.render.Styles; import com.refinedmods.refinedstorage.render.Styles;
import com.refinedmods.refinedstorage.tile.config.IType; import com.refinedmods.refinedstorage.tile.config.IType;
import com.refinedmods.refinedstorage.util.RenderUtils; import com.refinedmods.refinedstorage.util.RenderUtils;
@@ -82,13 +82,8 @@ public class FilterItem extends Item {
tooltip.add(new TranslationTextComponent("gui.refinedstorage.filter.mod_filter").setStyle(Styles.BLUE)); tooltip.add(new TranslationTextComponent("gui.refinedstorage.filter.mod_filter").setStyle(Styles.BLUE));
} }
FilterItemsItemHandler items = new FilterItemsItemHandler(stack); RenderUtils.addCombinedItemsToTooltip(tooltip, false, new ConfiguredItemsInFilterItemHandler(stack).getConfiguredItems());
RenderUtils.addCombinedFluidsToTooltip(tooltip, false, new ConfiguredFluidsInFilterItemHandler(stack).getConfiguredFluids());
RenderUtils.addCombinedItemsToTooltip(tooltip, false, items.getFilteredItems());
FilterFluidInventory fluids = new FilterFluidInventory(stack);
RenderUtils.addCombinedFluidsToTooltip(tooltip, false, fluids.getFilteredFluids());
} }
@Override @Override

View File

@@ -47,11 +47,11 @@ public class FilterUpdateMessage {
if (player != null && player.openContainer instanceof FilterContainer) { if (player != null && player.openContainer instanceof FilterContainer) {
ctx.get().enqueueWork(() -> { ctx.get().enqueueWork(() -> {
FilterItem.setCompare(((FilterContainer) player.openContainer).getStack(), message.compare); FilterItem.setCompare(((FilterContainer) player.openContainer).getFilterItem(), message.compare);
FilterItem.setMode(((FilterContainer) player.openContainer).getStack(), message.mode); FilterItem.setMode(((FilterContainer) player.openContainer).getFilterItem(), message.mode);
FilterItem.setModFilter(((FilterContainer) player.openContainer).getStack(), message.modFilter); FilterItem.setModFilter(((FilterContainer) player.openContainer).getFilterItem(), message.modFilter);
FilterItem.setName(((FilterContainer) player.openContainer).getStack(), message.name); FilterItem.setName(((FilterContainer) player.openContainer).getFilterItem(), message.name);
FilterItem.setType(((FilterContainer) player.openContainer).getStack(), message.type); FilterItem.setType(((FilterContainer) player.openContainer).getFilterItem(), message.type);
}); });
} }

View File

@@ -36,13 +36,13 @@ public class FilterScreen extends BaseScreen<FilterContainer> {
public FilterScreen(FilterContainer container, PlayerInventory inventory, ITextComponent title) { public FilterScreen(FilterContainer container, PlayerInventory inventory, ITextComponent title) {
super(container, 176, 231, inventory, title); super(container, 176, 231, inventory, title);
this.stack = container.getStack(); this.stack = container.getFilterItem();
this.compare = FilterItem.getCompare(container.getStack()); this.compare = FilterItem.getCompare(container.getFilterItem());
this.mode = FilterItem.getMode(container.getStack()); this.mode = FilterItem.getMode(container.getFilterItem());
this.modFilter = FilterItem.isModFilter(container.getStack()); this.modFilter = FilterItem.isModFilter(container.getFilterItem());
this.name = FilterItem.getName(container.getStack()); this.name = FilterItem.getName(container.getFilterItem());
this.type = FilterItem.getType(container.getStack()); this.type = FilterItem.getType(container.getFilterItem());
} }
@Override @Override