diff --git a/src/main/java/refinedstorage/container/ContainerGrid.java b/src/main/java/refinedstorage/container/ContainerGrid.java index 308649927..fddc3a828 100755 --- a/src/main/java/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/refinedstorage/container/ContainerGrid.java @@ -60,9 +60,7 @@ public class ContainerGrid extends ContainerBase { addSlotToContainer(new SlotOutput(((TileGrid) grid).getPatterns(), 1, 152, 132)); } - if (!(grid instanceof WirelessGrid)) { - addSlotToContainer(new SlotItemHandler(((TileGrid) grid).getFilter(), 0, 204, 6)); - } + addSlotToContainer(new SlotItemHandler(grid.getFilter(), 0, 204, 6)); } public IGrid getGrid() { diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 4a268be27..1ee09b6c8 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -46,7 +46,7 @@ public class GuiGrid extends GuiBase { private int slotNumber; public GuiGrid(ContainerGrid container, IGrid grid) { - super(container, !(grid instanceof WirelessGrid) ? 227 : 193, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208); + super(container, 227, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208); setScrollbar(new Scrollbar(174, 20, 12, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 70 : 88)); getScrollbar().setCanScroll(false); @@ -100,24 +100,22 @@ public class GuiGrid extends GuiBase { while (t.hasNext()) { ClientStack stack = t.next(); - if (!(grid instanceof WirelessGrid)) { - List filteredItems = ((TileGrid) grid).getFilteredItems(); + List filteredItems = grid.getFilteredItems(); - boolean found = filteredItems.isEmpty(); + boolean found = filteredItems.isEmpty(); - for (ItemStack item : filteredItems) { - if (CompareUtils.compareStackNoQuantity(stack.getStack(), item)) { - found = true; + for (ItemStack item : filteredItems) { + if (CompareUtils.compareStackNoQuantity(stack.getStack(), item)) { + found = true; - break; - } + break; } + } - if (!found) { - t.remove(); + if (!found) { + t.remove(); - continue; - } + continue; } if (grid.getViewType() == TileGrid.VIEW_TYPE_NON_CRAFTABLES && stack.isCraftable()) { @@ -175,8 +173,33 @@ public class GuiGrid extends GuiBase { } } - getScrollbar().setCanScroll(getRows() > getVisibleRows()); - getScrollbar().setScrollDelta((float) getScrollbar().getScrollbarHeight() / (float) getRows()); + getScrollbar() + + . + + setCanScroll(getRows() + + > + + getVisibleRows() + + ); + + getScrollbar() + + . + + setScrollDelta((float) getScrollbar + + (). + + getScrollbarHeight() + + / (float) + + getRows() + + ); } private int getOffset() { diff --git a/src/main/java/refinedstorage/inventory/GridFilterInGridItemHandler.java b/src/main/java/refinedstorage/inventory/GridFilterInGridItemHandler.java new file mode 100755 index 000000000..1e7f24b9d --- /dev/null +++ b/src/main/java/refinedstorage/inventory/GridFilterInGridItemHandler.java @@ -0,0 +1,40 @@ +package refinedstorage.inventory; + +import net.minecraft.item.ItemStack; +import refinedstorage.RefinedStorageItems; +import refinedstorage.tile.TileBase; + +import java.util.List; + +public class GridFilterInGridItemHandler extends BasicItemHandler { + private List filteredItems; + + public GridFilterInGridItemHandler(List filteredItems) { + super(1, new BasicItemValidator(RefinedStorageItems.GRID_FILTER)); + + this.filteredItems = filteredItems; + } + + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + + filteredItems.clear(); + + ItemStack stack = getStackInSlot(slot); + + if (stack != null && stack.hasTagCompound()) { + BasicItemHandler items = new BasicItemHandler(9 * 3); + + TileBase.readItems(items, 0, stack.getTagCompound()); + + for (int i = 0; i < items.getSlots(); ++i) { + ItemStack item = items.getStackInSlot(i); + + if (item != null) { + filteredItems.add(item); + } + } + } + } +} diff --git a/src/main/java/refinedstorage/tile/grid/IGrid.java b/src/main/java/refinedstorage/tile/grid/IGrid.java index 33486d41f..219d76224 100755 --- a/src/main/java/refinedstorage/tile/grid/IGrid.java +++ b/src/main/java/refinedstorage/tile/grid/IGrid.java @@ -1,10 +1,14 @@ package refinedstorage.tile.grid; +import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import refinedstorage.api.network.IGridHandler; import refinedstorage.block.EnumGridType; +import refinedstorage.inventory.BasicItemHandler; import refinedstorage.tile.config.IRedstoneModeConfig; +import java.util.List; + public interface IGrid { EnumGridType getType(); @@ -28,6 +32,10 @@ public interface IGrid { void onSearchBoxModeChanged(int searchBoxMode); + List getFilteredItems(); + + BasicItemHandler getFilter(); + IRedstoneModeConfig getRedstoneModeConfig(); boolean isConnected(); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index e15f19591..d8442f0a3 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -21,9 +21,9 @@ import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemValidator; +import refinedstorage.inventory.GridFilterInGridItemHandler; import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridSettingsUpdate; -import refinedstorage.tile.TileBase; import refinedstorage.tile.TileNode; import refinedstorage.tile.config.IRedstoneModeConfig; @@ -66,31 +66,8 @@ public class TileGrid extends TileNode implements IGrid { private InventoryCraftResult result = new InventoryCraftResult(); private BasicItemHandler patterns = new BasicItemHandler(2, this, new BasicItemValidator(RefinedStorageItems.PATTERN)); - private BasicItemHandler filter = new BasicItemHandler(1, this, new BasicItemValidator(RefinedStorageItems.GRID_FILTER)) { - @Override - protected void onContentsChanged(int slot) { - super.onContentsChanged(slot); - - filteredItems.clear(); - - ItemStack stack = getStackInSlot(slot); - - if (stack != null && stack.hasTagCompound()) { - BasicItemHandler items = new BasicItemHandler(9 * 3); - - TileBase.readItems(items, 0, stack.getTagCompound()); - - for (int i = 0; i < items.getSlots(); ++i) { - ItemStack item = items.getStackInSlot(i); - - if (item != null) { - filteredItems.add(item); - } - } - } - } - }; private List filteredItems = new ArrayList(); + private GridFilterInGridItemHandler filter = new GridFilterInGridItemHandler(filteredItems); private EnumGridType type; @@ -153,10 +130,12 @@ public class TileGrid extends TileNode implements IGrid { return patterns; } + @Override public BasicItemHandler getFilter() { return filter; } + @Override public List getFilteredItems() { return filteredItems; } diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 5bffe15de..7bcea4f86 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -2,6 +2,7 @@ package refinedstorage.tile.grid; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; @@ -9,28 +10,62 @@ import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.api.network.IGridHandler; import refinedstorage.block.EnumGridType; +import refinedstorage.inventory.BasicItemHandler; +import refinedstorage.inventory.GridFilterInGridItemHandler; import refinedstorage.item.ItemWirelessGrid; import refinedstorage.network.MessageWirelessGridSettingsUpdate; +import refinedstorage.tile.TileBase; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.controller.TileController; +import java.util.ArrayList; +import java.util.List; + public class WirelessGrid implements IGrid { - private EnumHand hand; private World world; - private BlockPos controllerPos; + + private EnumHand hand; + private ItemStack stack; + + private BlockPos controller; + private int viewType; private int sortingType; private int sortingDirection; private int searchBoxMode; + private List filteredItems = new ArrayList(); + private GridFilterInGridItemHandler filter = new GridFilterInGridItemHandler(filteredItems) { + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + + if (!world.isRemote) { + if (!stack.hasTagCompound()) { + stack.setTagCompound(new NBTTagCompound()); + } + + TileBase.writeItems(this, 0, stack.getTagCompound()); + } + } + }; + public WirelessGrid(World world, ItemStack stack, EnumHand hand) { - this.hand = hand; this.world = world; - this.controllerPos = new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack)); + + this.stack = stack; + this.hand = hand; + + this.controller = new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack)); + this.viewType = ItemWirelessGrid.getViewType(stack); this.sortingType = ItemWirelessGrid.getSortingType(stack); this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack); this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack); + + if (stack.hasTagCompound()) { + TileBase.readItems(filter, 0, stack.getTagCompound()); + } } @Override @@ -40,7 +75,7 @@ public class WirelessGrid implements IGrid { @Override public BlockPos getNetworkPosition() { - return controllerPos; + return controller; } @Override @@ -98,6 +133,16 @@ public class WirelessGrid implements IGrid { this.searchBoxMode = searchBoxMode; } + @Override + public List getFilteredItems() { + return filteredItems; + } + + @Override + public BasicItemHandler getFilter() { + return filter; + } + @Override public IRedstoneModeConfig getRedstoneModeConfig() { return null; @@ -117,7 +162,7 @@ public class WirelessGrid implements IGrid { } private TileController getController() { - TileEntity tile = world.getTileEntity(controllerPos); + TileEntity tile = world.getTileEntity(controller); return tile instanceof TileController ? (TileController) tile : null; }