Filters now support fluids and can be inserted in the Fluid Grid. Fixes #1920
This commit is contained in:
@@ -1,18 +1,16 @@
|
||||
package com.raoulvdberge.refinedstorage.api.util;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
/**
|
||||
* A filter.
|
||||
*/
|
||||
public interface IFilter {
|
||||
public interface IFilter<T> {
|
||||
int MODE_WHITELIST = 0;
|
||||
int MODE_BLACKLIST = 1;
|
||||
|
||||
/**
|
||||
* @return the stack being filtered
|
||||
*/
|
||||
ItemStack getStack();
|
||||
T getStack();
|
||||
|
||||
/**
|
||||
* @return the compare flags, see {@link IComparer}
|
||||
|
||||
@@ -4,23 +4,30 @@ import com.raoulvdberge.refinedstorage.api.network.grid.IGridTab;
|
||||
import com.raoulvdberge.refinedstorage.api.render.IElementDrawer;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IFilter;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fml.client.config.GuiUtils;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class GridTab implements IGridTab {
|
||||
private List<IFilter> filters;
|
||||
private String name;
|
||||
@Nonnull
|
||||
private ItemStack icon;
|
||||
@Nullable
|
||||
private FluidStack fluidIcon;
|
||||
|
||||
public GridTab(List<IFilter> filters, String name, ItemStack icon) {
|
||||
public GridTab(List<IFilter> filters, String name, @Nonnull ItemStack icon, @Nullable FluidStack fluidIcon) {
|
||||
this.filters = filters;
|
||||
this.name = name;
|
||||
this.icon = icon;
|
||||
this.fluidIcon = fluidIcon;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -37,8 +44,14 @@ public class GridTab implements IGridTab {
|
||||
|
||||
@Override
|
||||
public void drawIcon(int x, int y, IElementDrawer<ItemStack> itemDrawer, IElementDrawer<FluidStack> fluidDrawer) {
|
||||
RenderHelper.enableGUIStandardItemLighting();
|
||||
if (!icon.isEmpty()) {
|
||||
RenderHelper.enableGUIStandardItemLighting();
|
||||
|
||||
itemDrawer.draw(x, y, icon);
|
||||
itemDrawer.draw(x, y, icon);
|
||||
} else {
|
||||
fluidDrawer.draw(x, y, fluidIcon);
|
||||
|
||||
GlStateManager.enableAlpha();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.raoulvdberge.refinedstorage.apiimpl.util;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.util.IFilter;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
public class FilterFluid implements IFilter<FluidStack> {
|
||||
private FluidStack stack;
|
||||
private int compare;
|
||||
private int mode;
|
||||
private boolean modFilter;
|
||||
|
||||
public FilterFluid(FluidStack stack, int compare, int mode, boolean modFilter) {
|
||||
this.stack = stack;
|
||||
this.compare = compare;
|
||||
this.mode = mode;
|
||||
this.modFilter = modFilter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FluidStack getStack() {
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCompare() {
|
||||
return compare;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMode() {
|
||||
return mode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isModFilter() {
|
||||
return modFilter;
|
||||
}
|
||||
}
|
||||
@@ -3,13 +3,13 @@ package com.raoulvdberge.refinedstorage.apiimpl.util;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IFilter;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class Filter implements IFilter {
|
||||
public class FilterItem implements IFilter<ItemStack> {
|
||||
private ItemStack stack;
|
||||
private int compare;
|
||||
private int mode;
|
||||
private boolean modFilter;
|
||||
|
||||
public Filter(ItemStack stack, int compare, int mode, boolean modFilter) {
|
||||
public FilterItem(ItemStack stack, int compare, int mode, boolean modFilter) {
|
||||
this.stack = stack;
|
||||
this.compare = compare;
|
||||
this.mode = mode;
|
||||
@@ -1,8 +1,14 @@
|
||||
package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilter;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.filter.SlotFilterFluid;
|
||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventoryFilter;
|
||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventoryFilterIcon;
|
||||
import com.raoulvdberge.refinedstorage.inventory.item.ItemHandlerFilterIcon;
|
||||
import com.raoulvdberge.refinedstorage.inventory.item.ItemHandlerFilterItems;
|
||||
import com.raoulvdberge.refinedstorage.item.ItemFilter;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
@@ -19,8 +25,12 @@ public class ContainerFilter extends ContainerBase {
|
||||
|
||||
ItemHandlerFilterItems filter = new ItemHandlerFilterItems(stack);
|
||||
|
||||
FluidInventoryFilterIcon fluidIcon = new FluidInventoryFilterIcon(stack);
|
||||
FluidInventory fluidFilter = new FluidInventoryFilter(stack);
|
||||
|
||||
for (int i = 0; i < 27; ++i) {
|
||||
addSlotToContainer(new SlotFilter(filter, i, x, y));
|
||||
addSlotToContainer(new SlotFilter(filter, i, x, y).setEnableHandler(() -> ItemFilter.getType(stack) == IType.ITEMS));
|
||||
addSlotToContainer(new SlotFilterFluid(fluidFilter, i, x, y).setEnableHandler(() -> ItemFilter.getType(stack) == IType.FLUIDS));
|
||||
|
||||
if ((i + 1) % 9 == 0) {
|
||||
x = 8;
|
||||
@@ -30,11 +40,12 @@ public class ContainerFilter extends ContainerBase {
|
||||
}
|
||||
}
|
||||
|
||||
addSlotToContainer(new SlotFilter(new ItemHandlerFilterIcon(stack), 0, 8, 117));
|
||||
addSlotToContainer(new SlotFilter(new ItemHandlerFilterIcon(stack), 0, 8, 117).setEnableHandler(() -> ItemFilter.getType(stack) == IType.ITEMS));
|
||||
addSlotToContainer(new SlotFilterFluid(fluidIcon, 0, 8, 117).setEnableHandler(() -> ItemFilter.getType(stack) == IType.FLUIDS));
|
||||
|
||||
addPlayerInventory(8, 149);
|
||||
|
||||
transferManager.addItemFilterTransfer(player.inventory, filter);
|
||||
transferManager.addFilterTransfer(player.inventory, filter, fluidFilter, () -> ItemFilter.getType(stack));
|
||||
}
|
||||
|
||||
public ItemStack getStack() {
|
||||
|
||||
@@ -54,9 +54,7 @@ public class ContainerGrid extends ContainerBase {
|
||||
|
||||
this.transferManager.clearTransfers();
|
||||
|
||||
if (grid.getGridType() != GridType.FLUID || grid instanceof IPortableGrid) {
|
||||
addFilterSlots();
|
||||
}
|
||||
addFilterSlots();
|
||||
|
||||
if (grid instanceof IPortableGrid) {
|
||||
addPortableGridSlots();
|
||||
|
||||
@@ -4,22 +4,28 @@ import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IFilter;
|
||||
import com.raoulvdberge.refinedstorage.container.ContainerFilter;
|
||||
import com.raoulvdberge.refinedstorage.gui.control.SideButtonFilterType;
|
||||
import com.raoulvdberge.refinedstorage.item.ItemFilter;
|
||||
import com.raoulvdberge.refinedstorage.network.MessageFilterUpdate;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiTextField;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fml.client.config.GuiCheckBox;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class GuiFilter extends GuiBase {
|
||||
private ItemStack stack;
|
||||
|
||||
private int compare;
|
||||
private int mode;
|
||||
private boolean modFilter;
|
||||
private String name;
|
||||
private int type;
|
||||
|
||||
private GuiCheckBox compareDamage;
|
||||
private GuiCheckBox compareNBT;
|
||||
private GuiCheckBox compareNbt;
|
||||
private GuiCheckBox toggleModFilter;
|
||||
private GuiButton toggleMode;
|
||||
private GuiTextField nameField;
|
||||
@@ -27,19 +33,26 @@ public class GuiFilter extends GuiBase {
|
||||
public GuiFilter(ContainerFilter container) {
|
||||
super(container, 176, 231);
|
||||
|
||||
this.stack = container.getStack();
|
||||
|
||||
this.compare = ItemFilter.getCompare(container.getStack());
|
||||
this.mode = ItemFilter.getMode(container.getStack());
|
||||
this.modFilter = ItemFilter.isModFilter(container.getStack());
|
||||
this.name = ItemFilter.getName(container.getStack());
|
||||
this.type = ItemFilter.getType(container.getStack());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(int x, int y) {
|
||||
compareDamage = addCheckBox(x + 7, y + 77, t("gui.refinedstorage:filter.compare_damage"), (compare & IComparer.COMPARE_DAMAGE) == IComparer.COMPARE_DAMAGE);
|
||||
compareNBT = addCheckBox(x + 7 + compareDamage.getButtonWidth() + 4, y + 77, t("gui.refinedstorage:filter.compare_nbt"), (compare & IComparer.COMPARE_NBT) == IComparer.COMPARE_NBT);
|
||||
compareNbt = addCheckBox(x + 7, y + 77, t("gui.refinedstorage:filter.compare_nbt"), (compare & IComparer.COMPARE_NBT) == IComparer.COMPARE_NBT);
|
||||
compareDamage = addCheckBox(x + 7 + compareNbt.getButtonWidth() + 4, y + 77, t("gui.refinedstorage:filter.compare_damage"), (compare & IComparer.COMPARE_DAMAGE) == IComparer.COMPARE_DAMAGE);
|
||||
compareDamage.visible = type == IType.ITEMS;
|
||||
|
||||
toggleModFilter = addCheckBox(0, y + 71 + 25, t("gui.refinedstorage:filter.mod_filter"), modFilter);
|
||||
toggleMode = addButton(x + 7, y + 71 + 21, 0, 20, "");
|
||||
|
||||
updateModeButton(mode);
|
||||
|
||||
nameField = new GuiTextField(0, fontRenderer, x + 34, y + 121, 137 - 6, fontRenderer.FONT_HEIGHT);
|
||||
nameField.setText(name);
|
||||
nameField.setEnableBackgroundDrawing(false);
|
||||
@@ -47,6 +60,8 @@ public class GuiFilter extends GuiBase {
|
||||
nameField.setCanLoseFocus(true);
|
||||
nameField.setFocused(false);
|
||||
nameField.setTextColor(16777215);
|
||||
|
||||
addSideButton(new SideButtonFilterType(this));
|
||||
}
|
||||
|
||||
private void updateModeButton(int mode) {
|
||||
@@ -98,7 +113,7 @@ public class GuiFilter extends GuiBase {
|
||||
|
||||
if (button == compareDamage) {
|
||||
compare ^= IComparer.COMPARE_DAMAGE;
|
||||
} else if (button == compareNBT) {
|
||||
} else if (button == compareNbt) {
|
||||
compare ^= IComparer.COMPARE_NBT;
|
||||
} else if (button == toggleMode) {
|
||||
mode = mode == IFilter.MODE_WHITELIST ? IFilter.MODE_BLACKLIST : IFilter.MODE_WHITELIST;
|
||||
@@ -111,7 +126,19 @@ public class GuiFilter extends GuiBase {
|
||||
sendUpdate();
|
||||
}
|
||||
|
||||
private void sendUpdate() {
|
||||
RS.INSTANCE.network.sendToServer(new MessageFilterUpdate(compare, mode, modFilter, nameField.getText()));
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(int type) {
|
||||
this.type = type;
|
||||
|
||||
ItemFilter.setType(stack, type);
|
||||
|
||||
compareDamage.visible = type == IType.ITEMS;
|
||||
}
|
||||
|
||||
public void sendUpdate() {
|
||||
RS.INSTANCE.network.sendToServer(new MessageFilterUpdate(compare, mode, modFilter, nameField.getText(), type));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.raoulvdberge.refinedstorage.gui.control;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.gui.GuiBase;
|
||||
import com.raoulvdberge.refinedstorage.gui.GuiFilter;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import net.minecraft.util.text.TextFormatting;
|
||||
|
||||
public class SideButtonFilterType extends SideButton {
|
||||
private GuiFilter gui;
|
||||
|
||||
public SideButtonFilterType(GuiFilter gui) {
|
||||
super(gui);
|
||||
|
||||
this.gui = gui;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTooltip() {
|
||||
return GuiBase.t("sidebutton.refinedstorage:type") + "\n" + TextFormatting.GRAY + GuiBase.t("sidebutton.refinedstorage:type." + gui.getType());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawButtonIcon(int x, int y) {
|
||||
gui.drawTexture(x, y, 16 * gui.getType(), 128, 16, 16);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed() {
|
||||
gui.setType(gui.getType() == IType.ITEMS ? IType.FLUIDS : IType.ITEMS);
|
||||
gui.sendUpdate();
|
||||
}
|
||||
}
|
||||
@@ -57,7 +57,7 @@ public class GuiGrid extends GuiBase implements IResizableDisplay {
|
||||
private int slotNumber;
|
||||
|
||||
public GuiGrid(ContainerGrid container, IGrid grid) {
|
||||
super(container, (grid.getGridType() == GridType.FLUID && !(grid instanceof IPortableGrid)) ? 193 : 227, 0);
|
||||
super(container, 227, 0);
|
||||
|
||||
this.grid = grid;
|
||||
this.view = grid.getGridType() == GridType.FLUID ? new GridViewFluid(this, getDefaultSorter(), getSorters()) : new GridViewItem(this, getDefaultSorter(), getSorters());
|
||||
@@ -278,24 +278,22 @@ public class GuiGrid extends GuiBase implements IResizableDisplay {
|
||||
|
||||
int yy = y + tabs.getHeight();
|
||||
|
||||
drawTexture(x, yy, 0, 0, screenWidth - (grid.getGridType() != GridType.FLUID ? 34 : 0), getTopHeight());
|
||||
drawTexture(x, yy, 0, 0, screenWidth - 34, getTopHeight());
|
||||
|
||||
// Filters and portable grid disk
|
||||
if (grid.getGridType() != GridType.FLUID || grid instanceof IPortableGrid) {
|
||||
drawTexture(x + screenWidth - 34 + 4, y + tabs.getHeight(), 197, 0, 30, grid instanceof IPortableGrid ? 114 : 82);
|
||||
}
|
||||
// Filters and/or portable grid disk
|
||||
drawTexture(x + screenWidth - 34 + 4, y + tabs.getHeight(), 197, 0, 30, grid instanceof IPortableGrid ? 114 : 82);
|
||||
|
||||
int rows = getVisibleRows();
|
||||
|
||||
for (int i = 0; i < rows; ++i) {
|
||||
yy += 18;
|
||||
|
||||
drawTexture(x, yy, 0, getTopHeight() + (i > 0 ? (i == rows - 1 ? 18 * 2 : 18) : 0), screenWidth - ((grid.getGridType() != GridType.FLUID || grid instanceof IPortableGrid) ? 34 : 0), 18);
|
||||
drawTexture(x, yy, 0, getTopHeight() + (i > 0 ? (i == rows - 1 ? 18 * 2 : 18) : 0), screenWidth - 34, 18);
|
||||
}
|
||||
|
||||
yy += 18;
|
||||
|
||||
drawTexture(x, yy, 0, getTopHeight() + (18 * 3), screenWidth - ((grid.getGridType() != GridType.FLUID || grid instanceof IPortableGrid) ? 34 : 0), getBottomHeight());
|
||||
drawTexture(x, yy, 0, getTopHeight() + (18 * 3), screenWidth - 34, getBottomHeight());
|
||||
|
||||
if (grid.getGridType() == GridType.PATTERN) {
|
||||
int ty = 0;
|
||||
|
||||
@@ -14,6 +14,6 @@ public class GridFilterCraftable implements Predicate<IGridStack> {
|
||||
|
||||
@Override
|
||||
public boolean test(IGridStack stack) {
|
||||
return stack instanceof GridStackItem && ((GridStackItem) stack).isCraftable() == craftable;
|
||||
return stack instanceof GridStackItem && stack.isCraftable() == craftable;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,12 @@ package com.raoulvdberge.refinedstorage.gui.grid.filtering;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.util.IFilter;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.gui.grid.stack.GridStackFluid;
|
||||
import com.raoulvdberge.refinedstorage.gui.grid.stack.GridStackItem;
|
||||
import com.raoulvdberge.refinedstorage.gui.grid.stack.IGridStack;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.FluidRegistry;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
@@ -18,10 +21,6 @@ public class GridFilterFilter implements Predicate<IGridStack> {
|
||||
|
||||
@Override
|
||||
public boolean test(IGridStack stack) {
|
||||
return accepts(filters, ((GridStackItem) stack).getStack(), stack.getModId());
|
||||
}
|
||||
|
||||
public static boolean accepts(List<IFilter> filters, ItemStack stack, String stackModId) {
|
||||
if (filters.isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
@@ -31,12 +30,28 @@ public class GridFilterFilter implements Predicate<IGridStack> {
|
||||
for (IFilter filter : filters) {
|
||||
lastMode = filter.getMode();
|
||||
|
||||
if (filter.isModFilter()) {
|
||||
if (filter.getStack().getItem().getRegistryName().getNamespace().equalsIgnoreCase(stackModId)) {
|
||||
if (stack instanceof GridStackItem && filter.getStack() instanceof ItemStack) {
|
||||
ItemStack stackInFilter = (ItemStack) filter.getStack();
|
||||
|
||||
if (filter.isModFilter()) {
|
||||
if (stackInFilter.getItem().getRegistryName().getNamespace().equalsIgnoreCase(stack.getModId())) {
|
||||
return filter.getMode() == IFilter.MODE_WHITELIST;
|
||||
}
|
||||
} else if (API.instance().getComparer().isEqual(((GridStackItem) stack).getStack(), stackInFilter, filter.getCompare())) {
|
||||
return filter.getMode() == IFilter.MODE_WHITELIST;
|
||||
}
|
||||
} else if (stack instanceof GridStackFluid && filter.getStack() instanceof FluidStack) {
|
||||
FluidStack stackInFilter = (FluidStack) filter.getStack();
|
||||
|
||||
if (filter.isModFilter()) {
|
||||
String stackInFilterModId = FluidRegistry.getModId(stackInFilter);
|
||||
|
||||
if (stackInFilterModId != null && stackInFilterModId.equalsIgnoreCase(stack.getModId())) {
|
||||
return filter.getMode() == IFilter.MODE_WHITELIST;
|
||||
}
|
||||
} else if (API.instance().getComparer().isEqual(((GridStackFluid) stack).getStack(), stackInFilter, filter.getCompare())) {
|
||||
return filter.getMode() == IFilter.MODE_WHITELIST;
|
||||
}
|
||||
} else if (API.instance().getComparer().isEqual(stack, filter.getStack(), filter.getCompare())) {
|
||||
return filter.getMode() == IFilter.MODE_WHITELIST;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ public class FluidInventory {
|
||||
private boolean empty = true;
|
||||
|
||||
@Nullable
|
||||
private Consumer<Integer> listener;
|
||||
protected Consumer<Integer> listener;
|
||||
|
||||
public FluidInventory(int size, int maxAmount, @Nullable Consumer<Integer> listener) {
|
||||
this.fluids = new FluidStack[size];
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.raoulvdberge.refinedstorage.inventory.fluid;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.item.ItemFilter;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.NonNullList;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
public class FluidInventoryFilter extends FluidInventory {
|
||||
public FluidInventoryFilter(ItemStack stack) {
|
||||
super(27, Integer.MAX_VALUE, null);
|
||||
|
||||
this.listener = slot -> {
|
||||
if (!stack.hasTagCompound()) {
|
||||
stack.setTagCompound(new NBTTagCompound());
|
||||
}
|
||||
|
||||
stack.getTagCompound().setTag(ItemFilter.NBT_FLUID_FILTERS, writeToNbt());
|
||||
};
|
||||
|
||||
if (stack.hasTagCompound() && stack.getTagCompound().hasKey(ItemFilter.NBT_FLUID_FILTERS)) {
|
||||
readFromNbt(stack.getTagCompound().getCompoundTag(ItemFilter.NBT_FLUID_FILTERS));
|
||||
}
|
||||
}
|
||||
|
||||
public NonNullList<FluidStack> getFilteredFluids() {
|
||||
NonNullList<FluidStack> list = NonNullList.create();
|
||||
|
||||
for (FluidStack fluid : this.getFluids()) {
|
||||
if (fluid != null) {
|
||||
list.add(fluid);
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.raoulvdberge.refinedstorage.inventory.fluid;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.item.ItemFilter;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
public class FluidInventoryFilterIcon extends FluidInventory {
|
||||
public FluidInventoryFilterIcon(ItemStack stack) {
|
||||
super(1, Integer.MAX_VALUE, null);
|
||||
|
||||
this.listener = slot -> {
|
||||
if (!stack.hasTagCompound()) {
|
||||
stack.setTagCompound(new NBTTagCompound());
|
||||
}
|
||||
|
||||
ItemFilter.setFluidIcon(stack, getFluid(slot));
|
||||
};
|
||||
|
||||
FluidStack icon = ItemFilter.getFluidIcon(stack);
|
||||
if (icon != null) {
|
||||
setFluid(0, icon);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,12 +4,15 @@ import com.raoulvdberge.refinedstorage.RSItems;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IGridTab;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IFilter;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.GridTab;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.util.Filter;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.util.FilterFluid;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.util.FilterItem;
|
||||
import com.raoulvdberge.refinedstorage.gui.GuiBase;
|
||||
import com.raoulvdberge.refinedstorage.gui.grid.GuiGrid;
|
||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventoryFilter;
|
||||
import com.raoulvdberge.refinedstorage.inventory.item.validator.ItemValidatorBasic;
|
||||
import com.raoulvdberge.refinedstorage.item.ItemFilter;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
|
||||
@@ -54,24 +57,31 @@ public class ItemHandlerFilter extends ItemHandlerBase {
|
||||
int mode = ItemFilter.getMode(filter);
|
||||
boolean modFilter = ItemFilter.isModFilter(filter);
|
||||
|
||||
ItemHandlerFilterItems items = new ItemHandlerFilterItems(filter);
|
||||
|
||||
List<IFilter> filters = new ArrayList<>();
|
||||
|
||||
ItemHandlerFilterItems items = new ItemHandlerFilterItems(filter);
|
||||
|
||||
for (ItemStack stack : items.getFilteredItems()) {
|
||||
if (stack.getItem() == RSItems.FILTER) {
|
||||
addFilter(stack);
|
||||
} else if (!stack.isEmpty()) {
|
||||
filters.add(new Filter(stack, compare, mode, modFilter));
|
||||
filters.add(new FilterItem(stack, compare, mode, modFilter));
|
||||
}
|
||||
}
|
||||
|
||||
ItemStack icon = ItemFilter.getIcon(filter);
|
||||
FluidInventoryFilter fluids = new FluidInventoryFilter(filter);
|
||||
|
||||
if (icon.isEmpty()) {
|
||||
for (FluidStack stack : fluids.getFilteredFluids()) {
|
||||
filters.add(new FilterFluid(stack, compare, mode, modFilter));
|
||||
}
|
||||
|
||||
ItemStack icon = ItemFilter.getIcon(filter);
|
||||
FluidStack fluidIcon = ItemFilter.getFluidIcon(filter);
|
||||
|
||||
if (icon.isEmpty() && fluidIcon == null) {
|
||||
this.filters.addAll(filters);
|
||||
} else {
|
||||
tabs.add(new GridTab(filters, ItemFilter.getName(filter), icon));
|
||||
tabs.add(new GridTab(filters, ItemFilter.getName(filter), icon, fluidIcon));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,9 +5,11 @@ import com.raoulvdberge.refinedstorage.RSGui;
|
||||
import com.raoulvdberge.refinedstorage.RSItems;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IFilter;
|
||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventoryFilter;
|
||||
import com.raoulvdberge.refinedstorage.inventory.item.ItemHandlerFilterItems;
|
||||
import com.raoulvdberge.refinedstorage.item.info.ItemInfo;
|
||||
import com.raoulvdberge.refinedstorage.render.IModelRegistration;
|
||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
@@ -20,9 +22,11 @@ import net.minecraft.util.EnumActionResult;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.text.TextFormatting;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
|
||||
@@ -32,6 +36,9 @@ public class ItemFilter extends ItemBase {
|
||||
private static final String NBT_MOD_FILTER = "ModFilter";
|
||||
private static final String NBT_NAME = "Name";
|
||||
private static final String NBT_ICON = "Icon";
|
||||
private static final String NBT_FLUID_ICON = "FluidIcon";
|
||||
private static final String NBT_TYPE = "Type";
|
||||
public static final String NBT_FLUID_FILTERS = "FluidFilters";
|
||||
|
||||
public ItemFilter() {
|
||||
super(new ItemInfo(RS.ID, "filter"));
|
||||
@@ -62,17 +69,6 @@ public class ItemFilter extends ItemBase {
|
||||
return new ActionResult<>(EnumActionResult.PASS, stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemStackDisplayName(ItemStack stack) {
|
||||
String name = getName(stack);
|
||||
|
||||
if (!name.trim().equals("")) {
|
||||
return name;
|
||||
}
|
||||
|
||||
return super.getItemStackDisplayName(stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addInformation(ItemStack stack, @Nullable World world, List<String> tooltip, ITooltipFlag flag) {
|
||||
super.addInformation(stack, world, tooltip, flag);
|
||||
@@ -86,6 +82,10 @@ public class ItemFilter extends ItemBase {
|
||||
ItemHandlerFilterItems items = new ItemHandlerFilterItems(stack);
|
||||
|
||||
RenderUtils.addCombinedItemsToTooltip(tooltip, false, items.getFilteredItems());
|
||||
|
||||
FluidInventoryFilter fluids = new FluidInventoryFilter(stack);
|
||||
|
||||
RenderUtils.addCombinedFluidsToTooltip(tooltip, false, fluids.getFilteredFluids());
|
||||
}
|
||||
|
||||
public static int getCompare(ItemStack stack) {
|
||||
@@ -136,6 +136,7 @@ public class ItemFilter extends ItemBase {
|
||||
stack.getTagCompound().setString(NBT_NAME, name);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public static ItemStack getIcon(ItemStack stack) {
|
||||
return stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_ICON) ? new ItemStack(stack.getTagCompound().getCompoundTag(NBT_ICON)) : ItemStack.EMPTY;
|
||||
}
|
||||
@@ -147,4 +148,33 @@ public class ItemFilter extends ItemBase {
|
||||
|
||||
stack.getTagCompound().setTag(NBT_ICON, icon.serializeNBT());
|
||||
}
|
||||
|
||||
public static void setFluidIcon(ItemStack stack, @Nullable FluidStack icon) {
|
||||
if (!stack.hasTagCompound()) {
|
||||
stack.setTagCompound(new NBTTagCompound());
|
||||
}
|
||||
|
||||
if (icon == null) {
|
||||
stack.getTagCompound().removeTag(NBT_FLUID_ICON);
|
||||
} else {
|
||||
stack.getTagCompound().setTag(NBT_FLUID_ICON, icon.writeToNBT(new NBTTagCompound()));
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static FluidStack getFluidIcon(ItemStack stack) {
|
||||
return stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_FLUID_ICON) ? FluidStack.loadFluidStackFromNBT(stack.getTagCompound().getCompoundTag(NBT_FLUID_ICON)) : null;
|
||||
}
|
||||
|
||||
public static int getType(ItemStack stack) {
|
||||
return stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_TYPE) ? stack.getTagCompound().getInteger(NBT_TYPE) : IType.ITEMS;
|
||||
}
|
||||
|
||||
public static void setType(ItemStack stack, int type) {
|
||||
if (!stack.hasTagCompound()) {
|
||||
stack.setTagCompound(new NBTTagCompound());
|
||||
}
|
||||
|
||||
stack.getTagCompound().setInteger(NBT_TYPE, type);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,13 +84,13 @@ public class ItemPattern extends ItemBase implements ICraftingPatternProvider {
|
||||
tooltip.add(TextFormatting.YELLOW + I18n.format("misc.refinedstorage:pattern.inputs") + TextFormatting.RESET);
|
||||
|
||||
RenderUtils.addCombinedItemsToTooltip(tooltip, true, pattern.getInputs().stream().map(i -> i.size() > 0 ? i.get(0) : ItemStack.EMPTY).collect(Collectors.toList()));
|
||||
RenderUtils.addCombinedFluidsToTooltip(tooltip, pattern.getFluidInputs());
|
||||
RenderUtils.addCombinedFluidsToTooltip(tooltip, true, pattern.getFluidInputs());
|
||||
|
||||
tooltip.add(TextFormatting.YELLOW + I18n.format("misc.refinedstorage:pattern.outputs") + TextFormatting.RESET);
|
||||
}
|
||||
|
||||
RenderUtils.addCombinedItemsToTooltip(tooltip, true, pattern.getOutputs());
|
||||
RenderUtils.addCombinedFluidsToTooltip(tooltip, pattern.getFluidOutputs());
|
||||
RenderUtils.addCombinedFluidsToTooltip(tooltip, true, pattern.getFluidOutputs());
|
||||
|
||||
if (isOredict(stack)) {
|
||||
tooltip.add(TextFormatting.BLUE + I18n.format("misc.refinedstorage:pattern.oredict") + TextFormatting.RESET);
|
||||
|
||||
@@ -12,15 +12,17 @@ public class MessageFilterUpdate extends MessageHandlerPlayerToServer<MessageFil
|
||||
private int mode;
|
||||
private boolean modFilter;
|
||||
private String name;
|
||||
private int type;
|
||||
|
||||
public MessageFilterUpdate() {
|
||||
}
|
||||
|
||||
public MessageFilterUpdate(int compare, int mode, boolean modFilter, String name) {
|
||||
public MessageFilterUpdate(int compare, int mode, boolean modFilter, String name, int type) {
|
||||
this.compare = compare;
|
||||
this.mode = mode;
|
||||
this.modFilter = modFilter;
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -29,6 +31,7 @@ public class MessageFilterUpdate extends MessageHandlerPlayerToServer<MessageFil
|
||||
mode = buf.readInt();
|
||||
modFilter = buf.readBoolean();
|
||||
name = ByteBufUtils.readUTF8String(buf);
|
||||
type = buf.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -37,6 +40,7 @@ public class MessageFilterUpdate extends MessageHandlerPlayerToServer<MessageFil
|
||||
buf.writeInt(mode);
|
||||
buf.writeBoolean(modFilter);
|
||||
ByteBufUtils.writeUTF8String(buf, name);
|
||||
buf.writeInt(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -46,6 +50,7 @@ public class MessageFilterUpdate extends MessageHandlerPlayerToServer<MessageFil
|
||||
ItemFilter.setMode(((ContainerFilter) player.openContainer).getStack(), message.mode);
|
||||
ItemFilter.setModFilter(((ContainerFilter) player.openContainer).getStack(), message.modFilter);
|
||||
ItemFilter.setName(((ContainerFilter) player.openContainer).getStack(), message.name);
|
||||
ItemFilter.setType(((ContainerFilter) player.openContainer).getStack(), message.type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,11 +52,7 @@ public class TileGrid extends TileNode<NetworkNodeGrid> {
|
||||
public static final TileDataParameter<Integer, TileGrid> TAB_SELECTED = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getTabSelected(), (t, v) -> {
|
||||
t.getNode().setTabSelected(v == t.getNode().getTabSelected() ? -1 : v);
|
||||
t.getNode().markDirty();
|
||||
}, (initial, p) -> {
|
||||
if (p != -1) {
|
||||
GuiBase.executeLater(GuiGrid.class, grid -> grid.getView().sort());
|
||||
}
|
||||
});
|
||||
}, (initial, p) -> GuiBase.executeLater(GuiGrid.class, grid -> grid.getView().sort()));
|
||||
public static final TileDataParameter<Integer, TileGrid> TAB_PAGE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getTabPage(), (t, v) -> {
|
||||
if (v >= 0 && v <= t.getNode().getTotalTabPages()) {
|
||||
t.getNode().setTabPage(v);
|
||||
|
||||
@@ -90,11 +90,7 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid,
|
||||
private static final TileDataParameter<Integer, TilePortableGrid> TAB_SELECTED = new TileDataParameter<>(DataSerializers.VARINT, 0, TilePortableGrid::getTabSelected, (t, v) -> {
|
||||
t.setTabSelected(v == t.getTabSelected() ? -1 : v);
|
||||
t.markDirty();
|
||||
}, (initial, p) -> {
|
||||
if (p != -1) {
|
||||
GuiBase.executeLater(GuiGrid.class, grid -> grid.getView().sort());
|
||||
}
|
||||
});
|
||||
}, (initial, p) -> GuiBase.executeLater(GuiGrid.class, grid -> grid.getView().sort()));
|
||||
private static final TileDataParameter<Integer, TilePortableGrid> TAB_PAGE = new TileDataParameter<>(DataSerializers.VARINT, 0, TilePortableGrid::getTabPage, (t, v) -> {
|
||||
if (v >= 0 && v <= t.getTotalTabPages()) {
|
||||
t.setTabPage(v);
|
||||
|
||||
@@ -260,7 +260,7 @@ public final class RenderUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static void addCombinedFluidsToTooltip(List<String> tooltip, NonNullList<FluidStack> stacks) {
|
||||
public static void addCombinedFluidsToTooltip(List<String> tooltip, boolean showMb, NonNullList<FluidStack> stacks) {
|
||||
Set<Integer> combinedIndices = new HashSet<>();
|
||||
|
||||
for (int i = 0; i < stacks.size(); ++i) {
|
||||
@@ -279,7 +279,7 @@ public final class RenderUtils {
|
||||
}
|
||||
}
|
||||
|
||||
tooltip.add(API.instance().getQuantityFormatter().formatInBucketForm(amount) + " " + data);
|
||||
tooltip.add((showMb ? (API.instance().getQuantityFormatter().formatInBucketForm(amount) + " ") : "") + data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user