package net.glowstone.inventory;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import java.util.ListIterator;
/**
* ListIterator for the contents of an inventory.
*/
public final class InventoryIterator implements ListIterator<ItemStack> {
private final Inventory inventory;
private int nextIndex;
private byte direction; // -1: backwards, 0: not moved, 1: forwards
public InventoryIterator(Inventory inventory) {
this.inventory = inventory;
this.nextIndex = 0;
}
public InventoryIterator(Inventory inventory, int position) {
this.inventory = inventory;
this.nextIndex = position;
}
@Override
public boolean hasNext() {
return nextIndex < inventory.getSize();
}
@Override
public ItemStack next() {
direction = 1;
return inventory.getItem(nextIndex++);
}
@Override
public boolean hasPrevious() {
return nextIndex > 0;
}
@Override
public ItemStack previous() {
direction = -1;
return inventory.getItem(--nextIndex);
}
@Override
public int nextIndex() {
return nextIndex;
}
@Override
public int previousIndex() {
return nextIndex - 1;
}
@Override
public void set(ItemStack itemStack) {
if (direction == 0) {
throw new IllegalStateException("Must call next or previous first");
}
int i = direction > 0 ? nextIndex - 1 : nextIndex;
inventory.setItem(i, itemStack);
}
@Override
public void add(ItemStack itemStack) {
throw new UnsupportedOperationException("Cannot add or remove from inventory");
}
@Override
public void remove() {
throw new UnsupportedOperationException("Cannot add or remove from inventory");
}
}