diff --git a/src/main/java/refinedstorage/container/ContainerGridFilter.java b/src/main/java/refinedstorage/container/ContainerGridFilter.java index c0cd3520a..9d04a6b83 100755 --- a/src/main/java/refinedstorage/container/ContainerGridFilter.java +++ b/src/main/java/refinedstorage/container/ContainerGridFilter.java @@ -8,10 +8,12 @@ import refinedstorage.inventory.ItemHandlerGridFilter; public class ContainerGridFilter extends ContainerBase { private ItemHandlerGridFilter filter; + private ItemStack stack; public ContainerGridFilter(EntityPlayer player, ItemStack stack) { super(player); + this.stack = stack; this.filter = new ItemHandlerGridFilter(stack); for (int i = 0; i < 9; ++i) { @@ -21,6 +23,10 @@ public class ContainerGridFilter extends ContainerBase { addPlayerInventory(8, 70); } + public ItemStack getStack() { + return stack; + } + @Override public ItemStack transferStackInSlot(EntityPlayer player, int index) { ItemStack stack = null; diff --git a/src/main/java/refinedstorage/gui/GuiGridFilter.java b/src/main/java/refinedstorage/gui/GuiGridFilter.java index 21b03d25d..8d6b119ed 100755 --- a/src/main/java/refinedstorage/gui/GuiGridFilter.java +++ b/src/main/java/refinedstorage/gui/GuiGridFilter.java @@ -1,20 +1,31 @@ package refinedstorage.gui; +import net.minecraft.client.gui.GuiButton; import net.minecraftforge.fml.client.config.GuiCheckBox; +import refinedstorage.RefinedStorage; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerGridFilter; +import refinedstorage.item.ItemGridFilter; +import refinedstorage.network.MessageGridFilterUpdate; + +import java.io.IOException; public class GuiGridFilter extends GuiBase { + private int compare; + private GuiCheckBox compareDamage; private GuiCheckBox compareNBT; public GuiGridFilter(ContainerGridFilter container) { super(container, 176, 152); + + this.compare = ItemGridFilter.getCompare(container.getStack()); } @Override public void init(int x, int y) { - compareDamage = addCheckBox(x + 7, y + 41, t("gui.refinedstorage:grid_filter.compare_damage"), false); - compareNBT = addCheckBox(x + 7 + compareDamage.getButtonWidth() + 4, y + 41, t("gui.refinedstorage:grid_filter.compare_nbt"), false); + compareDamage = addCheckBox(x + 7, y + 41, t("gui.refinedstorage:grid_filter.compare_damage"), (compare & CompareUtils.COMPARE_DAMAGE) == CompareUtils.COMPARE_DAMAGE); + compareNBT = addCheckBox(x + 7 + compareDamage.getButtonWidth() + 4, y + 41, t("gui.refinedstorage:grid_filter.compare_nbt"), (compare & CompareUtils.COMPARE_NBT) == CompareUtils.COMPARE_NBT); } @Override @@ -33,4 +44,17 @@ public class GuiGridFilter extends GuiBase { drawString(7, 7, t("gui.refinedstorage:grid_filter")); drawString(7, 58, t("container.inventory")); } + + @Override + protected void actionPerformed(GuiButton button) throws IOException { + super.actionPerformed(button); + + if (button == compareDamage) { + compare ^= CompareUtils.COMPARE_DAMAGE; + } else if (button == compareNBT) { + compare ^= CompareUtils.COMPARE_NBT; + } + + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridFilterUpdate(compare)); + } } diff --git a/src/main/java/refinedstorage/item/ItemGridFilter.java b/src/main/java/refinedstorage/item/ItemGridFilter.java index f31452d49..6461662b5 100755 --- a/src/main/java/refinedstorage/item/ItemGridFilter.java +++ b/src/main/java/refinedstorage/item/ItemGridFilter.java @@ -2,6 +2,7 @@ package refinedstorage.item; 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; @@ -14,6 +15,8 @@ import refinedstorage.inventory.ItemHandlerGridFilter; import java.util.List; public class ItemGridFilter extends ItemBase { + private static final String NBT_COMPARE = "Compare"; + public ItemGridFilter() { super("grid_filter"); @@ -43,4 +46,16 @@ public class ItemGridFilter extends ItemBase { ItemPattern.combineItems(tooltip, items.getFilteredItems()); } + + public static int getCompare(ItemStack stack) { + return (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_COMPARE)) ? stack.getTagCompound().getInteger(NBT_COMPARE) : 0; + } + + public static void setCompare(ItemStack stack, int compare) { + if (!stack.hasTagCompound()) { + stack.setTagCompound(new NBTTagCompound()); + } + + stack.getTagCompound().setInteger(NBT_COMPARE, compare); + } } diff --git a/src/main/java/refinedstorage/network/MessageGridFilterUpdate.java b/src/main/java/refinedstorage/network/MessageGridFilterUpdate.java new file mode 100755 index 000000000..2fd123dd6 --- /dev/null +++ b/src/main/java/refinedstorage/network/MessageGridFilterUpdate.java @@ -0,0 +1,35 @@ +package refinedstorage.network; + +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import refinedstorage.container.ContainerGridFilter; +import refinedstorage.item.ItemGridFilter; + +public class MessageGridFilterUpdate extends MessageHandlerPlayerToServer implements IMessage { + private int compare; + + public MessageGridFilterUpdate() { + } + + public MessageGridFilterUpdate(int compare) { + this.compare = compare; + } + + @Override + public void fromBytes(ByteBuf buf) { + compare = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(compare); + } + + @Override + public void handle(MessageGridFilterUpdate message, EntityPlayerMP player) { + if (player.openContainer instanceof ContainerGridFilter) { + ItemGridFilter.setCompare(((ContainerGridFilter) player.openContainer).getStack(), message.compare); + } + } +} diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 5bf983892..75b76fa3f 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -58,6 +58,7 @@ public class CommonProxy { RefinedStorage.INSTANCE.network.registerMessage(MessageGridUpdate.class, MessageGridUpdate.class, id++, Side.CLIENT); RefinedStorage.INSTANCE.network.registerMessage(MessageGridDelta.class, MessageGridDelta.class, id++, Side.CLIENT); RefinedStorage.INSTANCE.network.registerMessage(MessageProcessingPatternEncoderClear.class, MessageProcessingPatternEncoderClear.class, id++, Side.SERVER); + RefinedStorage.INSTANCE.network.registerMessage(MessageGridFilterUpdate.class, MessageGridFilterUpdate.class, id++, Side.SERVER); NetworkRegistry.INSTANCE.registerGuiHandler(RefinedStorage.INSTANCE, new GuiHandler());