Add oredict + whitelist/blacklist to gridfilter

This commit is contained in:
Raoul Van den Berge
2016-12-07 16:06:17 +01:00
parent b513b4e704
commit 729ff97620
17 changed files with 105 additions and 63 deletions

View File

@@ -16,11 +16,21 @@ public class ContainerGridFilter extends ContainerBase {
this.stack = stack; this.stack = stack;
this.filter = new ItemHandlerGridFilter(stack); this.filter = new ItemHandlerGridFilter(stack);
for (int i = 0; i < 9; ++i) { int y = 20;
addSlotToContainer(new SlotFilter(filter, i, 8 + (i * 18), 20)); int x = 8;
for (int i = 0; i < 27; ++i) {
addSlotToContainer(new SlotFilter(filter, i, x, y));
if ((i + 1) % 9 == 0) {
x = 8;
y += 18;
} else {
x += 18;
}
} }
addPlayerInventory(8, 70); addPlayerInventory(8, 126);
} }
public ItemStack getStack() { public ItemStack getStack() {
@@ -36,8 +46,8 @@ public class ContainerGridFilter extends ContainerBase {
if (slot.getHasStack()) { if (slot.getHasStack()) {
stack = slot.getStack(); stack = slot.getStack();
if (index > 9 - 1) { if (index > 27 - 1) {
return mergeItemStackToFilters(stack, 0, 9); return mergeItemStackToFilters(stack, 0, 27);
} }
return ItemStack.EMPTY; return ItemStack.EMPTY;

View File

@@ -12,20 +12,33 @@ import java.io.IOException;
public class GuiGridFilter extends GuiBase { public class GuiGridFilter extends GuiBase {
private int compare; private int compare;
private int mode;
private GuiCheckBox compareDamage; private GuiCheckBox compareDamage;
private GuiCheckBox compareNBT; private GuiCheckBox compareNBT;
private GuiCheckBox compareOredict;
private GuiButton toggleMode;
public GuiGridFilter(ContainerGridFilter container) { public GuiGridFilter(ContainerGridFilter container) {
super(container, 176, 152); super(container, 176, 208);
this.compare = ItemGridFilter.getCompare(container.getStack()); this.compare = ItemGridFilter.getCompare(container.getStack());
this.mode = ItemGridFilter.getMode(container.getStack());
} }
@Override @Override
public void init(int x, int y) { public void init(int x, int y) {
compareDamage = addCheckBox(x + 7, y + 41, t("gui.refinedstorage:grid_filter.compare_damage"), (compare & IComparer.COMPARE_DAMAGE) == IComparer.COMPARE_DAMAGE); compareDamage = addCheckBox(x + 7, y + 77, t("gui.refinedstorage:grid_filter.compare_damage"), (compare & IComparer.COMPARE_DAMAGE) == IComparer.COMPARE_DAMAGE);
compareNBT = addCheckBox(x + 7 + compareDamage.getButtonWidth() + 4, y + 41, t("gui.refinedstorage:grid_filter.compare_nbt"), (compare & IComparer.COMPARE_NBT) == IComparer.COMPARE_NBT); compareNBT = addCheckBox(x + 7 + compareDamage.getButtonWidth() + 4, y + 77, t("gui.refinedstorage:grid_filter.compare_nbt"), (compare & IComparer.COMPARE_NBT) == IComparer.COMPARE_NBT);
compareOredict = addCheckBox(x + 7 + compareDamage.getButtonWidth() + 4 + compareNBT.getButtonWidth() + 4, y + 77, t("gui.refinedstorage:grid_filter.compare_oredict"), (compare & IComparer.COMPARE_OREDICT) == IComparer.COMPARE_OREDICT);
toggleMode = addButton(x + 7, y + 71 + 20, 0, 20, "");
updateModeButton(mode);
}
private void updateModeButton(int mode) {
String text = mode == ItemGridFilter.MODE_WHITELIST ? t("sidebutton.refinedstorage:mode.whitelist") : t("sidebutton.refinedstorage:mode.blacklist");
toggleMode.setWidth(fontRendererObj.getStringWidth(text) + 7);
toggleMode.displayString = text;
} }
@Override @Override
@@ -42,7 +55,7 @@ public class GuiGridFilter extends GuiBase {
@Override @Override
public void drawForeground(int mouseX, int mouseY) { public void drawForeground(int mouseX, int mouseY) {
drawString(7, 7, t("gui.refinedstorage:grid_filter")); drawString(7, 7, t("gui.refinedstorage:grid_filter"));
drawString(7, 58, t("container.inventory")); drawString(7, 114, t("container.inventory"));
} }
@Override @Override
@@ -53,8 +66,13 @@ public class GuiGridFilter extends GuiBase {
compare ^= IComparer.COMPARE_DAMAGE; compare ^= IComparer.COMPARE_DAMAGE;
} else if (button == compareNBT) { } else if (button == compareNBT) {
compare ^= IComparer.COMPARE_NBT; compare ^= IComparer.COMPARE_NBT;
} else if (button == compareOredict) {
compare ^= IComparer.COMPARE_OREDICT;
} else if (button == toggleMode) {
mode = mode == ItemGridFilter.MODE_WHITELIST ? ItemGridFilter.MODE_BLACKLIST : ItemGridFilter.MODE_WHITELIST;
updateModeButton(mode);
} }
RS.INSTANCE.network.sendToServer(new MessageGridFilterUpdate(compare)); RS.INSTANCE.network.sendToServer(new MessageGridFilterUpdate(compare, mode));
} }
} }

View File

@@ -5,10 +5,12 @@ import net.minecraft.item.ItemStack;
public class GridFilteredItem { public class GridFilteredItem {
private ItemStack stack; private ItemStack stack;
private int compare; private int compare;
private int mode;
public GridFilteredItem(ItemStack stack, int compare) { public GridFilteredItem(ItemStack stack, int compare, int mode) {
this.stack = stack; this.stack = stack;
this.compare = compare; this.compare = compare;
this.mode = mode;
} }
public ItemStack getStack() { public ItemStack getStack() {
@@ -18,4 +20,8 @@ public class GridFilteredItem {
public int getCompare() { public int getCompare() {
return compare; return compare;
} }
public int getMode() {
return mode;
}
} }

View File

@@ -14,9 +14,4 @@ public class GridFilterCraftable implements IGridFilter {
public boolean accepts(IClientStack stack) { public boolean accepts(IClientStack stack) {
return stack instanceof ClientStackItem && ((ClientStackItem) stack).isCraftable() == craftable; return stack instanceof ClientStackItem && ((ClientStackItem) stack).isCraftable() == craftable;
} }
@Override
public boolean isStrong() {
return true;
}
} }

View File

@@ -1,24 +0,0 @@
package com.raoulvdberge.refinedstorage.gui.grid.filtering;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.gui.grid.GridFilteredItem;
import com.raoulvdberge.refinedstorage.gui.grid.stack.ClientStackItem;
import com.raoulvdberge.refinedstorage.gui.grid.stack.IClientStack;
public class GridFilterFilteredItem implements IGridFilter {
private GridFilteredItem filteredItem;
public GridFilterFilteredItem(GridFilteredItem filteredItem) {
this.filteredItem = filteredItem;
}
@Override
public boolean accepts(IClientStack stack) {
return API.instance().getComparer().isEqual(((ClientStackItem) stack).getStack(), filteredItem.getStack(), filteredItem.getCompare());
}
@Override
public boolean isStrong() {
return true;
}
}

View File

@@ -0,0 +1,32 @@
package com.raoulvdberge.refinedstorage.gui.grid.filtering;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.gui.grid.GridFilteredItem;
import com.raoulvdberge.refinedstorage.gui.grid.stack.ClientStackItem;
import com.raoulvdberge.refinedstorage.gui.grid.stack.IClientStack;
import com.raoulvdberge.refinedstorage.item.ItemGridFilter;
import java.util.List;
public class GridFilterFilteredItems implements IGridFilter {
private List<GridFilteredItem> filteredItems;
public GridFilterFilteredItems(List<GridFilteredItem> filteredItems) {
this.filteredItems = filteredItems;
}
@Override
public boolean accepts(IClientStack stack) {
int lastMode = ItemGridFilter.MODE_WHITELIST;
for (GridFilteredItem filteredItem : filteredItems) {
if (API.instance().getComparer().isEqual(((ClientStackItem) stack).getStack(), filteredItem.getStack(), filteredItem.getCompare())) {
return filteredItem.getMode() == ItemGridFilter.MODE_WHITELIST;
}
lastMode = filteredItem.getMode();
}
return lastMode != ItemGridFilter.MODE_WHITELIST;
}
}

View File

@@ -30,9 +30,4 @@ public class GridFilterMod implements IGridFilter {
return true; return true;
} }
@Override
public boolean isStrong() {
return true;
}
} }

View File

@@ -13,9 +13,4 @@ public class GridFilterName implements IGridFilter {
public boolean accepts(IClientStack stack) { public boolean accepts(IClientStack stack) {
return stack.getName().toLowerCase().contains(name); return stack.getName().toLowerCase().contains(name);
} }
@Override
public boolean isStrong() {
return false;
}
} }

View File

@@ -1,6 +1,5 @@
package com.raoulvdberge.refinedstorage.gui.grid.filtering; package com.raoulvdberge.refinedstorage.gui.grid.filtering;
import com.raoulvdberge.refinedstorage.gui.grid.GridFilteredItem;
import com.raoulvdberge.refinedstorage.tile.grid.IGrid; import com.raoulvdberge.refinedstorage.tile.grid.IGrid;
import com.raoulvdberge.refinedstorage.tile.grid.TileGrid; import com.raoulvdberge.refinedstorage.tile.grid.TileGrid;
@@ -27,8 +26,8 @@ public class GridFilterParser {
filters.add(new GridFilterCraftable(true)); filters.add(new GridFilterCraftable(true));
} }
for (GridFilteredItem filteredItem : grid.getFilteredItems()) { if (!grid.getFilteredItems().isEmpty()) {
filters.add(new GridFilterFilteredItem(filteredItem)); filters.add(new GridFilterFilteredItems(grid.getFilteredItems()));
} }
return filters; return filters;

View File

@@ -21,9 +21,4 @@ public class GridFilterTooltip implements IGridFilter {
return otherTooltip.contains(tooltip); return otherTooltip.contains(tooltip);
} }
@Override
public boolean isStrong() {
return false;
}
} }

View File

@@ -4,6 +4,4 @@ import com.raoulvdberge.refinedstorage.gui.grid.stack.IClientStack;
public interface IGridFilter { public interface IGridFilter {
boolean accepts(IClientStack stack); boolean accepts(IClientStack stack);
boolean isStrong();
} }

View File

@@ -10,7 +10,7 @@ public class ItemHandlerGridFilter extends ItemStackHandler {
private ItemStack stack; private ItemStack stack;
public ItemHandlerGridFilter(ItemStack stack) { public ItemHandlerGridFilter(ItemStack stack) {
super(9); super(27);
this.stack = stack; this.stack = stack;

View File

@@ -30,12 +30,13 @@ public class ItemHandlerGridFilterInGrid extends ItemHandlerBasic {
if (!filter.isEmpty()) { if (!filter.isEmpty()) {
int compare = ItemGridFilter.getCompare(filter); int compare = ItemGridFilter.getCompare(filter);
int mode = ItemGridFilter.getMode(filter);
ItemHandlerGridFilter items = new ItemHandlerGridFilter(filter); ItemHandlerGridFilter items = new ItemHandlerGridFilter(filter);
for (ItemStack item : items.getFilteredItems()) { for (ItemStack item : items.getFilteredItems()) {
if (!item.isEmpty()) { if (!item.isEmpty()) {
filteredItems.add(new GridFilteredItem(item, compare)); filteredItems.add(new GridFilteredItem(item, compare, mode));
} }
} }
} }

View File

@@ -16,7 +16,11 @@ import net.minecraft.world.World;
import java.util.List; import java.util.List;
public class ItemGridFilter extends ItemBase { public class ItemGridFilter extends ItemBase {
public static final int MODE_WHITELIST = 0;
public static final int MODE_BLACKLIST = 1;
private static final String NBT_COMPARE = "Compare"; private static final String NBT_COMPARE = "Compare";
private static final String NBT_MODE = "Mode";
public ItemGridFilter() { public ItemGridFilter() {
super("grid_filter"); super("grid_filter");
@@ -61,4 +65,16 @@ public class ItemGridFilter extends ItemBase {
stack.getTagCompound().setInteger(NBT_COMPARE, compare); stack.getTagCompound().setInteger(NBT_COMPARE, compare);
} }
public static int getMode(ItemStack stack) {
return (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_MODE)) ? stack.getTagCompound().getInteger(NBT_MODE) : MODE_WHITELIST;
}
public static void setMode(ItemStack stack, int mode) {
if (!stack.hasTagCompound()) {
stack.setTagCompound(new NBTTagCompound());
}
stack.getTagCompound().setInteger(NBT_MODE, mode);
}
} }

View File

@@ -8,28 +8,33 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
public class MessageGridFilterUpdate extends MessageHandlerPlayerToServer<MessageGridFilterUpdate> implements IMessage { public class MessageGridFilterUpdate extends MessageHandlerPlayerToServer<MessageGridFilterUpdate> implements IMessage {
private int compare; private int compare;
private int mode;
public MessageGridFilterUpdate() { public MessageGridFilterUpdate() {
} }
public MessageGridFilterUpdate(int compare) { public MessageGridFilterUpdate(int compare, int mode) {
this.compare = compare; this.compare = compare;
this.mode = mode;
} }
@Override @Override
public void fromBytes(ByteBuf buf) { public void fromBytes(ByteBuf buf) {
compare = buf.readInt(); compare = buf.readInt();
mode = buf.readInt();
} }
@Override @Override
public void toBytes(ByteBuf buf) { public void toBytes(ByteBuf buf) {
buf.writeInt(compare); buf.writeInt(compare);
buf.writeInt(mode);
} }
@Override @Override
public void handle(MessageGridFilterUpdate message, EntityPlayerMP player) { public void handle(MessageGridFilterUpdate message, EntityPlayerMP player) {
if (player.openContainer instanceof ContainerGridFilter) { if (player.openContainer instanceof ContainerGridFilter) {
ItemGridFilter.setCompare(((ContainerGridFilter) player.openContainer).getStack(), message.compare); ItemGridFilter.setCompare(((ContainerGridFilter) player.openContainer).getStack(), message.compare);
ItemGridFilter.setMode(((ContainerGridFilter) player.openContainer).getStack(), message.mode);
} }
} }
} }

View File

@@ -37,6 +37,7 @@ gui.refinedstorage:processing_pattern_encoder.pattern_create=Create Pattern
gui.refinedstorage:grid_filter=Grid Filter gui.refinedstorage:grid_filter=Grid Filter
gui.refinedstorage:grid_filter.compare_damage=Damage gui.refinedstorage:grid_filter.compare_damage=Damage
gui.refinedstorage:grid_filter.compare_nbt=NBT gui.refinedstorage:grid_filter.compare_nbt=NBT
gui.refinedstorage:grid_filter.compare_oredict=Oredict
gui.refinedstorage:network_transmitter=Network Transmitter gui.refinedstorage:network_transmitter=Network Transmitter
gui.refinedstorage:network_transmitter.distance=%d blocks gui.refinedstorage:network_transmitter.distance=%d blocks
gui.refinedstorage:network_transmitter.dimension=Dimension %d gui.refinedstorage:network_transmitter.dimension=Dimension %d

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB