Filters now support fluids and can be inserted in the Fluid Grid. Fixes #1920

This commit is contained in:
raoulvdberge
2018-07-29 21:42:59 +02:00
parent 218c756d5b
commit 0788d6b7d0
22 changed files with 302 additions and 72 deletions

View File

@@ -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}

View File

@@ -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();
}
}
}

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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() {

View File

@@ -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();

View File

@@ -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));
}
}

View File

@@ -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();
}
}

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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];

View File

@@ -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;
}
}

View File

@@ -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);
}
}
}

View File

@@ -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));
}
}
}

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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);
}
}
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);
}
}
}