Cleanup filtering system.
This commit is contained in:
@@ -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}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()) {
|
||||
@@ -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) -> {
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user