Grid filter support for Wireless Grid
This commit is contained in:
@@ -60,9 +60,7 @@ public class ContainerGrid extends ContainerBase {
|
|||||||
addSlotToContainer(new SlotOutput(((TileGrid) grid).getPatterns(), 1, 152, 132));
|
addSlotToContainer(new SlotOutput(((TileGrid) grid).getPatterns(), 1, 152, 132));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(grid instanceof WirelessGrid)) {
|
addSlotToContainer(new SlotItemHandler(grid.getFilter(), 0, 204, 6));
|
||||||
addSlotToContainer(new SlotItemHandler(((TileGrid) grid).getFilter(), 0, 204, 6));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IGrid getGrid() {
|
public IGrid getGrid() {
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ public class GuiGrid extends GuiBase {
|
|||||||
private int slotNumber;
|
private int slotNumber;
|
||||||
|
|
||||||
public GuiGrid(ContainerGrid container, IGrid grid) {
|
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));
|
setScrollbar(new Scrollbar(174, 20, 12, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 70 : 88));
|
||||||
getScrollbar().setCanScroll(false);
|
getScrollbar().setCanScroll(false);
|
||||||
@@ -100,24 +100,22 @@ public class GuiGrid extends GuiBase {
|
|||||||
while (t.hasNext()) {
|
while (t.hasNext()) {
|
||||||
ClientStack stack = t.next();
|
ClientStack stack = t.next();
|
||||||
|
|
||||||
if (!(grid instanceof WirelessGrid)) {
|
List<ItemStack> filteredItems = grid.getFilteredItems();
|
||||||
List<ItemStack> filteredItems = ((TileGrid) grid).getFilteredItems();
|
|
||||||
|
|
||||||
boolean found = filteredItems.isEmpty();
|
boolean found = filteredItems.isEmpty();
|
||||||
|
|
||||||
for (ItemStack item : filteredItems) {
|
for (ItemStack item : filteredItems) {
|
||||||
if (CompareUtils.compareStackNoQuantity(stack.getStack(), item)) {
|
if (CompareUtils.compareStackNoQuantity(stack.getStack(), item)) {
|
||||||
found = true;
|
found = true;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!found) {
|
if (!found) {
|
||||||
t.remove();
|
t.remove();
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grid.getViewType() == TileGrid.VIEW_TYPE_NON_CRAFTABLES && stack.isCraftable()) {
|
if (grid.getViewType() == TileGrid.VIEW_TYPE_NON_CRAFTABLES && stack.isCraftable()) {
|
||||||
@@ -175,8 +173,33 @@ public class GuiGrid extends GuiBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getScrollbar().setCanScroll(getRows() > getVisibleRows());
|
getScrollbar()
|
||||||
getScrollbar().setScrollDelta((float) getScrollbar().getScrollbarHeight() / (float) getRows());
|
|
||||||
|
.
|
||||||
|
|
||||||
|
setCanScroll(getRows()
|
||||||
|
|
||||||
|
>
|
||||||
|
|
||||||
|
getVisibleRows()
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
getScrollbar()
|
||||||
|
|
||||||
|
.
|
||||||
|
|
||||||
|
setScrollDelta((float) getScrollbar
|
||||||
|
|
||||||
|
().
|
||||||
|
|
||||||
|
getScrollbarHeight()
|
||||||
|
|
||||||
|
/ (float)
|
||||||
|
|
||||||
|
getRows()
|
||||||
|
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getOffset() {
|
private int getOffset() {
|
||||||
|
|||||||
40
src/main/java/refinedstorage/inventory/GridFilterInGridItemHandler.java
Executable file
40
src/main/java/refinedstorage/inventory/GridFilterInGridItemHandler.java
Executable file
@@ -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<ItemStack> filteredItems;
|
||||||
|
|
||||||
|
public GridFilterInGridItemHandler(List<ItemStack> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,14 @@
|
|||||||
package refinedstorage.tile.grid;
|
package refinedstorage.tile.grid;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import refinedstorage.api.network.IGridHandler;
|
import refinedstorage.api.network.IGridHandler;
|
||||||
import refinedstorage.block.EnumGridType;
|
import refinedstorage.block.EnumGridType;
|
||||||
|
import refinedstorage.inventory.BasicItemHandler;
|
||||||
import refinedstorage.tile.config.IRedstoneModeConfig;
|
import refinedstorage.tile.config.IRedstoneModeConfig;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface IGrid {
|
public interface IGrid {
|
||||||
EnumGridType getType();
|
EnumGridType getType();
|
||||||
|
|
||||||
@@ -28,6 +32,10 @@ public interface IGrid {
|
|||||||
|
|
||||||
void onSearchBoxModeChanged(int searchBoxMode);
|
void onSearchBoxModeChanged(int searchBoxMode);
|
||||||
|
|
||||||
|
List<ItemStack> getFilteredItems();
|
||||||
|
|
||||||
|
BasicItemHandler getFilter();
|
||||||
|
|
||||||
IRedstoneModeConfig getRedstoneModeConfig();
|
IRedstoneModeConfig getRedstoneModeConfig();
|
||||||
|
|
||||||
boolean isConnected();
|
boolean isConnected();
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ import refinedstorage.block.EnumGridType;
|
|||||||
import refinedstorage.container.ContainerGrid;
|
import refinedstorage.container.ContainerGrid;
|
||||||
import refinedstorage.inventory.BasicItemHandler;
|
import refinedstorage.inventory.BasicItemHandler;
|
||||||
import refinedstorage.inventory.BasicItemValidator;
|
import refinedstorage.inventory.BasicItemValidator;
|
||||||
|
import refinedstorage.inventory.GridFilterInGridItemHandler;
|
||||||
import refinedstorage.item.ItemPattern;
|
import refinedstorage.item.ItemPattern;
|
||||||
import refinedstorage.network.MessageGridSettingsUpdate;
|
import refinedstorage.network.MessageGridSettingsUpdate;
|
||||||
import refinedstorage.tile.TileBase;
|
|
||||||
import refinedstorage.tile.TileNode;
|
import refinedstorage.tile.TileNode;
|
||||||
import refinedstorage.tile.config.IRedstoneModeConfig;
|
import refinedstorage.tile.config.IRedstoneModeConfig;
|
||||||
|
|
||||||
@@ -66,31 +66,8 @@ public class TileGrid extends TileNode implements IGrid {
|
|||||||
private InventoryCraftResult result = new InventoryCraftResult();
|
private InventoryCraftResult result = new InventoryCraftResult();
|
||||||
|
|
||||||
private BasicItemHandler patterns = new BasicItemHandler(2, this, new BasicItemValidator(RefinedStorageItems.PATTERN));
|
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<ItemStack> filteredItems = new ArrayList<ItemStack>();
|
private List<ItemStack> filteredItems = new ArrayList<ItemStack>();
|
||||||
|
private GridFilterInGridItemHandler filter = new GridFilterInGridItemHandler(filteredItems);
|
||||||
|
|
||||||
private EnumGridType type;
|
private EnumGridType type;
|
||||||
|
|
||||||
@@ -153,10 +130,12 @@ public class TileGrid extends TileNode implements IGrid {
|
|||||||
return patterns;
|
return patterns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public BasicItemHandler getFilter() {
|
public BasicItemHandler getFilter() {
|
||||||
return filter;
|
return filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public List<ItemStack> getFilteredItems() {
|
public List<ItemStack> getFilteredItems() {
|
||||||
return filteredItems;
|
return filteredItems;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package refinedstorage.tile.grid;
|
|||||||
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
@@ -9,28 +10,62 @@ import net.minecraft.world.World;
|
|||||||
import refinedstorage.RefinedStorage;
|
import refinedstorage.RefinedStorage;
|
||||||
import refinedstorage.api.network.IGridHandler;
|
import refinedstorage.api.network.IGridHandler;
|
||||||
import refinedstorage.block.EnumGridType;
|
import refinedstorage.block.EnumGridType;
|
||||||
|
import refinedstorage.inventory.BasicItemHandler;
|
||||||
|
import refinedstorage.inventory.GridFilterInGridItemHandler;
|
||||||
import refinedstorage.item.ItemWirelessGrid;
|
import refinedstorage.item.ItemWirelessGrid;
|
||||||
import refinedstorage.network.MessageWirelessGridSettingsUpdate;
|
import refinedstorage.network.MessageWirelessGridSettingsUpdate;
|
||||||
|
import refinedstorage.tile.TileBase;
|
||||||
import refinedstorage.tile.config.IRedstoneModeConfig;
|
import refinedstorage.tile.config.IRedstoneModeConfig;
|
||||||
import refinedstorage.tile.controller.TileController;
|
import refinedstorage.tile.controller.TileController;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class WirelessGrid implements IGrid {
|
public class WirelessGrid implements IGrid {
|
||||||
private EnumHand hand;
|
|
||||||
private World world;
|
private World world;
|
||||||
private BlockPos controllerPos;
|
|
||||||
|
private EnumHand hand;
|
||||||
|
private ItemStack stack;
|
||||||
|
|
||||||
|
private BlockPos controller;
|
||||||
|
|
||||||
private int viewType;
|
private int viewType;
|
||||||
private int sortingType;
|
private int sortingType;
|
||||||
private int sortingDirection;
|
private int sortingDirection;
|
||||||
private int searchBoxMode;
|
private int searchBoxMode;
|
||||||
|
|
||||||
|
private List<ItemStack> filteredItems = new ArrayList<ItemStack>();
|
||||||
|
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) {
|
public WirelessGrid(World world, ItemStack stack, EnumHand hand) {
|
||||||
this.hand = hand;
|
|
||||||
this.world = world;
|
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.viewType = ItemWirelessGrid.getViewType(stack);
|
||||||
this.sortingType = ItemWirelessGrid.getSortingType(stack);
|
this.sortingType = ItemWirelessGrid.getSortingType(stack);
|
||||||
this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack);
|
this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack);
|
||||||
this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack);
|
this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack);
|
||||||
|
|
||||||
|
if (stack.hasTagCompound()) {
|
||||||
|
TileBase.readItems(filter, 0, stack.getTagCompound());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -40,7 +75,7 @@ public class WirelessGrid implements IGrid {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockPos getNetworkPosition() {
|
public BlockPos getNetworkPosition() {
|
||||||
return controllerPos;
|
return controller;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -98,6 +133,16 @@ public class WirelessGrid implements IGrid {
|
|||||||
this.searchBoxMode = searchBoxMode;
|
this.searchBoxMode = searchBoxMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ItemStack> getFilteredItems() {
|
||||||
|
return filteredItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BasicItemHandler getFilter() {
|
||||||
|
return filter;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IRedstoneModeConfig getRedstoneModeConfig() {
|
public IRedstoneModeConfig getRedstoneModeConfig() {
|
||||||
return null;
|
return null;
|
||||||
@@ -117,7 +162,7 @@ public class WirelessGrid implements IGrid {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private TileController getController() {
|
private TileController getController() {
|
||||||
TileEntity tile = world.getTileEntity(controllerPos);
|
TileEntity tile = world.getTileEntity(controller);
|
||||||
|
|
||||||
return tile instanceof TileController ? (TileController) tile : null;
|
return tile instanceof TileController ? (TileController) tile : null;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user