diff --git a/InvUI/src/main/java/de/studiocode/invui/gui/builder/GUIBuilder.java b/InvUI/src/main/java/de/studiocode/invui/gui/builder/GUIBuilder.java index d6d217f..caa29a7 100644 --- a/InvUI/src/main/java/de/studiocode/invui/gui/builder/GUIBuilder.java +++ b/InvUI/src/main/java/de/studiocode/invui/gui/builder/GUIBuilder.java @@ -6,6 +6,7 @@ import de.studiocode.invui.gui.builder.guitype.GUIType; import de.studiocode.invui.gui.structure.Structure; import de.studiocode.invui.item.Item; import de.studiocode.invui.item.ItemProvider; +import de.studiocode.invui.virtualinventory.VirtualInventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ShapedRecipe; import org.jetbrains.annotations.NotNull; @@ -54,6 +55,11 @@ public class GUIBuilder { return this; } + public GUIBuilder addIngredient(char key, @NotNull VirtualInventory inventory) { + context.getStructure().addIngredient(key, inventory); + return this; + } + public GUIBuilder addIngredient(char key, @NotNull SlotElement element) { context.getStructure().addIngredient(key, element); return this; diff --git a/InvUI/src/main/java/de/studiocode/invui/gui/structure/Structure.java b/InvUI/src/main/java/de/studiocode/invui/gui/structure/Structure.java index 8713049..b7acfff 100644 --- a/InvUI/src/main/java/de/studiocode/invui/gui/structure/Structure.java +++ b/InvUI/src/main/java/de/studiocode/invui/gui/structure/Structure.java @@ -7,6 +7,7 @@ import de.studiocode.invui.item.Item; import de.studiocode.invui.item.ItemProvider; import de.studiocode.invui.item.ItemWrapper; import de.studiocode.invui.item.impl.SimpleItem; +import de.studiocode.invui.virtualinventory.VirtualInventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ShapedRecipe; import org.jetbrains.annotations.NotNull; @@ -76,6 +77,11 @@ public class Structure implements Cloneable { return addIngredient(key, new ItemSlotElement(item)); } + public Structure addIngredient(char key, @NotNull VirtualInventory inventory) { + if (ingredientList != null) throw new UnsupportedOperationException("Structure is locked"); + return addIngredientElementSupplier(key, new VISlotElementSupplier(inventory)); + } + public Structure addIngredient(char key, @NotNull SlotElement element) { if (ingredientList != null) throw new UnsupportedOperationException("Structure is locked"); ingredientMap.put(key, new Ingredient(element)); diff --git a/InvUI/src/main/java/de/studiocode/invui/gui/structure/VISlotElementSupplier.java b/InvUI/src/main/java/de/studiocode/invui/gui/structure/VISlotElementSupplier.java new file mode 100644 index 0000000..d369b27 --- /dev/null +++ b/InvUI/src/main/java/de/studiocode/invui/gui/structure/VISlotElementSupplier.java @@ -0,0 +1,31 @@ +package de.studiocode.invui.gui.structure; + +import de.studiocode.invui.gui.SlotElement.VISlotElement; +import de.studiocode.invui.item.ItemProvider; +import de.studiocode.invui.virtualinventory.VirtualInventory; + +import java.util.function.Supplier; + +public class VISlotElementSupplier implements Supplier { + + private final VirtualInventory inventory; + private final ItemProvider background; + private int slot = -1; + + public VISlotElementSupplier(VirtualInventory inventory) { + this.inventory = inventory; + this.background = null; + } + + public VISlotElementSupplier(VirtualInventory inventory, ItemProvider background) { + this.inventory = inventory; + this.background = background; + } + + @Override + public VISlotElement get() { + if (++slot == inventory.getSize()) slot = 0; + return new VISlotElement(inventory, slot, background); + } + +}