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.
*/
public interface IFilter<T> {
public interface IFilter {
int MODE_WHITELIST = 0;
int MODE_BLACKLIST = 1;
/**
* @return the stack being filtered
*/
T getStack();
Object getStack();
/**
* @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 net.minecraftforge.fluids.FluidStack;
public class FluidFilter implements IFilter<FluidStack> {
public class FluidFilter implements IFilter {
private final FluidStack stack;
private final int compare;
private final int mode;
@@ -17,7 +17,7 @@ public class FluidFilter implements IFilter<FluidStack> {
}
@Override
public FluidStack getStack() {
public Object getStack() {
return stack;
}

View File

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

View File

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

View File

@@ -6,8 +6,8 @@ import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.NonNullList;
import net.minecraftforge.fluids.FluidStack;
public class FilterFluidInventory extends FluidInventory {
public FilterFluidInventory(ItemStack stack) {
public class ConfiguredFluidsInFilterItemHandler extends FluidInventory {
public ConfiguredFluidsInFilterItemHandler(ItemStack stack) {
super(27, Integer.MAX_VALUE);
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();
for (FluidStack fluid : this.getFluids()) {

View File

@@ -5,8 +5,8 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraftforge.fluids.FluidStack;
public class FilterIconFluidInventory extends FluidInventory {
public FilterIconFluidInventory(ItemStack stack) {
public class ConfiguredIconInFluidFilterItemHandler extends FluidInventory {
public ConfiguredIconInFluidFilterItemHandler(ItemStack stack) {
super(1, Integer.MAX_VALUE);
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.minecraftforge.items.ItemStackHandler;
public class FilterItemsItemHandler extends ItemStackHandler {
public class ConfiguredItemsInFilterItemHandler extends ItemStackHandler {
private final ItemStack stack;
public FilterItemsItemHandler(ItemStack stack) {
public ConfiguredItemsInFilterItemHandler(ItemStack stack) {
super(27);
this.stack = stack;
@@ -30,7 +30,7 @@ public class FilterItemsItemHandler extends ItemStackHandler {
StackUtils.writeItems(this, 0, stack.getTag());
}
public NonNullList<ItemStack> getFilteredItems() {
public NonNullList<ItemStack> getConfiguredItems() {
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.util.FluidFilter;
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.item.FilterItem;
import com.refinedmods.refinedstorage.screen.BaseScreen;
@@ -40,10 +40,9 @@ public class FilterItemHandler extends BaseItemHandler {
tabs.clear();
for (int i = 0; i < getSlots(); ++i) {
ItemStack filter = getStackInSlot(i);
if (!filter.isEmpty()) {
addFilter(filter);
ItemStack filterItem = getStackInSlot(i);
if (!filterItem.isEmpty()) {
handleFilterItem(filterItem);
}
}
@@ -52,36 +51,31 @@ public class FilterItemHandler extends BaseItemHandler {
}
}
private void addFilter(ItemStack filter) {
int compare = FilterItem.getCompare(filter);
int mode = FilterItem.getMode(filter);
boolean modFilter = FilterItem.isModFilter(filter);
private void handleFilterItem(ItemStack filterItem) {
ItemStack icon = FilterItem.getIcon(filterItem);
FluidStack fluidIcon = FilterItem.getFluidIcon(filterItem);
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 : items.getFilteredItems()) {
for (ItemStack stack : new ConfiguredItemsInFilterItemHandler(filterItem).getConfiguredItems()) {
if (stack.getItem() == RSItems.FILTER.get()) {
addFilter(stack);
handleFilterItem(stack);
} 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 : fluids.getFilteredFluids()) {
filters.add(new FluidFilter(stack, compare, mode, modFilter));
for (FluidStack stack : new ConfiguredFluidsInFilterItemHandler(filterItem).getConfiguredFluids()) {
foundFilters.add(new FluidFilter(stack, compare, mode, modFilter));
}
ItemStack icon = FilterItem.getIcon(filter);
FluidStack fluidIcon = FilterItem.getFluidIcon(filter);
if (icon.isEmpty() && fluidIcon.isEmpty()) {
this.filters.addAll(filters);
filters.addAll(foundFilters);
} 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.IFilter;
import com.refinedmods.refinedstorage.container.FilterContainer;
import com.refinedmods.refinedstorage.inventory.fluid.FilterFluidInventory;
import com.refinedmods.refinedstorage.inventory.item.FilterItemsItemHandler;
import com.refinedmods.refinedstorage.inventory.fluid.ConfiguredFluidsInFilterItemHandler;
import com.refinedmods.refinedstorage.inventory.item.ConfiguredItemsInFilterItemHandler;
import com.refinedmods.refinedstorage.render.Styles;
import com.refinedmods.refinedstorage.tile.config.IType;
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));
}
FilterItemsItemHandler items = new FilterItemsItemHandler(stack);
RenderUtils.addCombinedItemsToTooltip(tooltip, false, items.getFilteredItems());
FilterFluidInventory fluids = new FilterFluidInventory(stack);
RenderUtils.addCombinedFluidsToTooltip(tooltip, false, fluids.getFilteredFluids());
RenderUtils.addCombinedItemsToTooltip(tooltip, false, new ConfiguredItemsInFilterItemHandler(stack).getConfiguredItems());
RenderUtils.addCombinedFluidsToTooltip(tooltip, false, new ConfiguredFluidsInFilterItemHandler(stack).getConfiguredFluids());
}
@Override

View File

@@ -47,11 +47,11 @@ public class FilterUpdateMessage {
if (player != null && player.openContainer instanceof FilterContainer) {
ctx.get().enqueueWork(() -> {
FilterItem.setCompare(((FilterContainer) player.openContainer).getStack(), message.compare);
FilterItem.setMode(((FilterContainer) player.openContainer).getStack(), message.mode);
FilterItem.setModFilter(((FilterContainer) player.openContainer).getStack(), message.modFilter);
FilterItem.setName(((FilterContainer) player.openContainer).getStack(), message.name);
FilterItem.setType(((FilterContainer) player.openContainer).getStack(), message.type);
FilterItem.setCompare(((FilterContainer) player.openContainer).getFilterItem(), message.compare);
FilterItem.setMode(((FilterContainer) player.openContainer).getFilterItem(), message.mode);
FilterItem.setModFilter(((FilterContainer) player.openContainer).getFilterItem(), message.modFilter);
FilterItem.setName(((FilterContainer) player.openContainer).getFilterItem(), message.name);
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) {
super(container, 176, 231, inventory, title);
this.stack = container.getStack();
this.stack = container.getFilterItem();
this.compare = FilterItem.getCompare(container.getStack());
this.mode = FilterItem.getMode(container.getStack());
this.modFilter = FilterItem.isModFilter(container.getStack());
this.name = FilterItem.getName(container.getStack());
this.type = FilterItem.getType(container.getStack());
this.compare = FilterItem.getCompare(container.getFilterItem());
this.mode = FilterItem.getMode(container.getFilterItem());
this.modFilter = FilterItem.isModFilter(container.getFilterItem());
this.name = FilterItem.getName(container.getFilterItem());
this.type = FilterItem.getType(container.getFilterItem());
}
@Override