package crazypants.enderio.machine.invpanel.server; import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer; import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawerGroup; import net.minecraft.item.ItemStack; public class DrawerGroupInventory extends AbstractInventory { final IDrawerGroup dg; public DrawerGroupInventory(IDrawerGroup dg) { this.dg = dg; } @Override int scanInventory(InventoryDatabaseServer db) { int count = dg.getDrawerCount(); if (count == 0) { setEmpty(db); return 0; } if (count != slotKeys.length) { reset(db, count); } for (int i = 0; i < count; i++) { IDrawer drawer = dg.getDrawer(i); ItemStack stack; int quantity; if (drawer != null && (quantity = drawer.getStoredItemCount()) > 0 && (stack = drawer.getStoredItemPrototype()) != null && drawer.canItemBeExtracted(stack)) { updateSlot(db, i, stack, quantity); } else { emptySlot(db, i); } } return count; } @Override int extractItem(InventoryDatabaseServer db, ItemEntry entry, int slot, int count) { if (slot >= dg.getDrawerCount()) { return 0; } IDrawer drawer = dg.getDrawer(slot); if (drawer == null) { return 0; } int remaining = drawer.getStoredItemCount(); if (remaining <= 0) { return 0; } ItemStack stack = drawer.getStoredItemPrototype(); if (db.lookupItem(stack, entry, false) != entry) { return 0; } if (count > remaining) { count = remaining; } remaining -= count; drawer.setStoredItemCount(remaining); updateCount(db, slot, entry, remaining); return count; } }