From 5fcd72800847df6944e012aad3993a42befb09d3 Mon Sep 17 00:00:00 2001 From: NichtStudioCode <51272202+NichtStudioCode@users.noreply.github.com> Date: Wed, 1 Sep 2021 13:10:35 +0200 Subject: [PATCH] Added VISlotElementSupplier --- .../invui/gui/builder/GUIBuilder.java | 6 ++++ .../invui/gui/structure/Structure.java | 6 ++++ .../gui/structure/VISlotElementSupplier.java | 31 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 InvUI/src/main/java/de/studiocode/invui/gui/structure/VISlotElementSupplier.java 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); + } + +}