Using CustomInventory
, here’s what I think you can do
Iterable<Slot> slots = functionToGetSlots();
List<Slot> slotsList = Lists.newArrayList(slots);
CustomInventory inventory = Inventories.customInventoryBuilder()
.name(someName)
.size(slotsList.size())
.build();
for (int i = 0, len = slotsList.size(); i < len; i++) {
Optional<ItemStack> optStack = slotsList.get(i).peek();
if (optStack.isPresent()) {
inventory.set(new SlotIndex(i), optStack.get());
}
}
Also, looking at my previous post to get all slots, I’m not sure if slots()
will return all slots in sub inventories. If not, here’s a recursive function to get all slots:
private Iterable<Slot> getSlots(Inventory inventory) {
if (inventory instanceof Slot) {
return Collections.emptyList();
}
Iterable<Slot> slots = inventory.slots();
for (Inventory subInventory : inventory) {
Iterables.concat(slots, getSlots(subInventory));
}
return slots;
}