Grid filter support for Wireless Grid

This commit is contained in:
Raoul Van den Berge
2016-07-30 01:27:23 +02:00
parent 771587c032
commit 5539b8f965
6 changed files with 142 additions and 49 deletions

View File

@@ -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() {

View File

@@ -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,8 +100,7 @@ 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();
@@ -118,7 +117,6 @@ public class GuiGrid extends GuiBase {
continue; continue;
} }
}
if (grid.getViewType() == TileGrid.VIEW_TYPE_NON_CRAFTABLES && stack.isCraftable()) { if (grid.getViewType() == TileGrid.VIEW_TYPE_NON_CRAFTABLES && stack.isCraftable()) {
t.remove(); t.remove();
@@ -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() {

View 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);
}
}
}
}
}

View File

@@ -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();

View File

@@ -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;
} }

View File

@@ -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;
} }