Added mod filter to grid filter, fixes #359

This commit is contained in:
Raoul Van den Berge
2016-12-07 18:16:46 +01:00
parent 729ff97620
commit 215240c9a7
8 changed files with 60 additions and 10 deletions

View File

@@ -1,5 +1,10 @@
# Refined Storage Changelog
### 1.3.4
- Added option to check for oredict in the Grid Filter (raoulvdberge)
- Added option to use a mod filter in the Grid Filter (raoulvdberge)
- Added option to use a whitelist or blacklist in the Grid Filter (raoulvdberge)
### 1.3.3
- Updated Forge to 2188 (raoulvdberge)
- Fixed not being able to start a crafting task (raoulvdberge)

View File

@@ -13,10 +13,12 @@ import java.io.IOException;
public class GuiGridFilter extends GuiBase {
private int compare;
private int mode;
private boolean modFilter;
private GuiCheckBox compareDamage;
private GuiCheckBox compareNBT;
private GuiCheckBox compareOredict;
private GuiCheckBox toggleModFilter;
private GuiButton toggleMode;
public GuiGridFilter(ContainerGridFilter container) {
@@ -24,6 +26,7 @@ public class GuiGridFilter extends GuiBase {
this.compare = ItemGridFilter.getCompare(container.getStack());
this.mode = ItemGridFilter.getMode(container.getStack());
this.modFilter = ItemGridFilter.isModFilter(container.getStack());
}
@Override
@@ -31,14 +34,16 @@ public class GuiGridFilter extends GuiBase {
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 + 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, "");
toggleModFilter = addCheckBox(0, y + 71 + 25, t("gui.refinedstorage:grid_filter.mod_filter"), modFilter);
toggleMode = addButton(x + 7, y + 71 + 21, 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.setWidth(fontRendererObj.getStringWidth(text) + 12);
toggleMode.displayString = text;
toggleModFilter.xPosition = toggleMode.xPosition + toggleMode.getButtonWidth() + 4;
}
@Override
@@ -55,7 +60,7 @@ public class GuiGridFilter extends GuiBase {
@Override
public void drawForeground(int mouseX, int mouseY) {
drawString(7, 7, t("gui.refinedstorage:grid_filter"));
drawString(7, 114, t("container.inventory"));
drawString(7, 115, t("container.inventory"));
}
@Override
@@ -71,8 +76,10 @@ public class GuiGridFilter extends GuiBase {
} else if (button == toggleMode) {
mode = mode == ItemGridFilter.MODE_WHITELIST ? ItemGridFilter.MODE_BLACKLIST : ItemGridFilter.MODE_WHITELIST;
updateModeButton(mode);
} else if (button == toggleModFilter) {
modFilter = !modFilter;
}
RS.INSTANCE.network.sendToServer(new MessageGridFilterUpdate(compare, mode));
RS.INSTANCE.network.sendToServer(new MessageGridFilterUpdate(compare, mode, modFilter));
}
}

View File

@@ -6,11 +6,13 @@ public class GridFilteredItem {
private ItemStack stack;
private int compare;
private int mode;
private boolean modFilter;
public GridFilteredItem(ItemStack stack, int compare, int mode) {
public GridFilteredItem(ItemStack stack, int compare, int mode, boolean modFilter) {
this.stack = stack;
this.compare = compare;
this.mode = mode;
this.modFilter = modFilter;
}
public ItemStack getStack() {
@@ -24,4 +26,8 @@ public class GridFilteredItem {
public int getMode() {
return mode;
}
public boolean isModFilter() {
return modFilter;
}
}

View File

@@ -20,11 +20,15 @@ public class GridFilterFilteredItems implements IGridFilter {
int lastMode = ItemGridFilter.MODE_WHITELIST;
for (GridFilteredItem filteredItem : filteredItems) {
if (API.instance().getComparer().isEqual(((ClientStackItem) stack).getStack(), filteredItem.getStack(), filteredItem.getCompare())) {
lastMode = filteredItem.getMode();
if (filteredItem.isModFilter()) {
if (filteredItem.getStack().getItem().getRegistryName().getResourceDomain().equalsIgnoreCase(stack.getModId())) {
return filteredItem.getMode() == ItemGridFilter.MODE_WHITELIST;
}
} else 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

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

View File

@@ -5,12 +5,14 @@ import com.raoulvdberge.refinedstorage.RSGui;
import com.raoulvdberge.refinedstorage.RSItems;
import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerGridFilter;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumHand;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World;
import java.util.List;
@@ -21,6 +23,7 @@ public class ItemGridFilter extends ItemBase {
private static final String NBT_COMPARE = "Compare";
private static final String NBT_MODE = "Mode";
private static final String NBT_MOD_FILTER = "ModFilter";
public ItemGridFilter() {
super("grid_filter");
@@ -49,6 +52,12 @@ public class ItemGridFilter extends ItemBase {
public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean advanced) {
super.addInformation(stack, player, tooltip, advanced);
tooltip.add(TextFormatting.YELLOW + I18n.format("sidebutton.refinedstorage:mode." + (getMode(stack) == MODE_WHITELIST ? "whitelist" : "blacklist")) + TextFormatting.RESET);
if (isModFilter(stack)) {
tooltip.add(TextFormatting.BLUE + I18n.format("gui.refinedstorage:grid_filter.mod_filter") + TextFormatting.RESET);
}
ItemHandlerGridFilter items = new ItemHandlerGridFilter(stack);
ItemPattern.combineItems(tooltip, false, items.getFilteredItems());
@@ -77,4 +86,16 @@ public class ItemGridFilter extends ItemBase {
stack.getTagCompound().setInteger(NBT_MODE, mode);
}
public static boolean isModFilter(ItemStack stack) {
return stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_MOD_FILTER) && stack.getTagCompound().getBoolean(NBT_MOD_FILTER);
}
public static void setModFilter(ItemStack stack, boolean modFilter) {
if (!stack.hasTagCompound()) {
stack.setTagCompound(new NBTTagCompound());
}
stack.getTagCompound().setBoolean(NBT_MOD_FILTER, modFilter);
}
}

View File

@@ -9,25 +9,29 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
public class MessageGridFilterUpdate extends MessageHandlerPlayerToServer<MessageGridFilterUpdate> implements IMessage {
private int compare;
private int mode;
private boolean modFilter;
public MessageGridFilterUpdate() {
}
public MessageGridFilterUpdate(int compare, int mode) {
public MessageGridFilterUpdate(int compare, int mode, boolean modFilter) {
this.compare = compare;
this.mode = mode;
this.modFilter = modFilter;
}
@Override
public void fromBytes(ByteBuf buf) {
compare = buf.readInt();
mode = buf.readInt();
modFilter = buf.readBoolean();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(compare);
buf.writeInt(mode);
buf.writeBoolean(modFilter);
}
@Override
@@ -35,6 +39,7 @@ public class MessageGridFilterUpdate extends MessageHandlerPlayerToServer<Messag
if (player.openContainer instanceof ContainerGridFilter) {
ItemGridFilter.setCompare(((ContainerGridFilter) player.openContainer).getStack(), message.compare);
ItemGridFilter.setMode(((ContainerGridFilter) player.openContainer).getStack(), message.mode);
ItemGridFilter.setModFilter(((ContainerGridFilter) player.openContainer).getStack(), message.modFilter);
}
}
}

View File

@@ -38,6 +38,7 @@ gui.refinedstorage:grid_filter=Grid Filter
gui.refinedstorage:grid_filter.compare_damage=Damage
gui.refinedstorage:grid_filter.compare_nbt=NBT
gui.refinedstorage:grid_filter.compare_oredict=Oredict
gui.refinedstorage:grid_filter.mod_filter=Mod filter
gui.refinedstorage:network_transmitter=Network Transmitter
gui.refinedstorage:network_transmitter.distance=%d blocks
gui.refinedstorage:network_transmitter.dimension=Dimension %d